Som*_*Man 18 jsf label selectonemenu
我正在开发一个JSF页面,其中包含一个基于以下内容的下拉列表List<SelectItem>:
<h:selectOneMenu value="#{bean.selectedItem}">
<f:selectItems value="#{bean.availableItems}" />
</h:selectOneMenu>
Run Code Online (Sandbox Code Playgroud)
我需要得到双方当前选定项的值和标签.现在我只得到价值.我怎样才能获得标签?
Bal*_*usC 47
你不能.这就是HTML的工作原理.你知道,JSF是一个HTML代码生成器.JSF <h:selectOneMenu>生成一个HTML <select><option>.HTML <select>元素仅发送value所选<option>元素的属性.它不会发送它的标签.
但那应该不是一个大问题.你已经知道了服务器端的值和标签#{bean.availableItems}.获取关联标签所需要做的就是将值作为键来获取.我建议把它作为一个Map反过来也可以用于f:selectItems.
基本启动示例:
public class Bean {
private String selectedItem; // +getter +setter
private Map<String, String> availableItems; // +getter
public Bean() {
availableItems = new LinkedHashMap<String, String>();
availableItems.put("value1", "label1");
availableItems.put("value2", "label2");
availableItems.put("value3", "label3");
}
public void submit() {
String selectedLabel = availableItems.get(selectedItem);
// ...
}
}
Run Code Online (Sandbox Code Playgroud)
同
<h:selectOneMenu value="#{bean.selectedItem}">
<f:selectItems value="#{bean.availableItems.entrySet()}" var="entry"
itemValue="#{entry.key}" itemLabel="#{entry.value}" />
</h:selectOneMenu>
Run Code Online (Sandbox Code Playgroud)
结果
<p>Selected label is #{bean.availableItems[bean.selectedItem]}</p>
Run Code Online (Sandbox Code Playgroud)
另一种方法是将名称和值都包装在表示实体的javabean对象中,并通过转换器将整个对象设置为值.
| 归档时间: |
|
| 查看次数: |
87689 次 |
| 最近记录: |