我正在开发一个 JSF 页面,该页面有一个基于List<SelectItem>
:
<h:selectOneMenu value="#{bean.selectedItem}">
<f:selectItems value="#{bean.availableItems}" />
</h:selectOneMenu>
我需要得到both当前所选项目的值和标签。现在我只得到价值。我也能得到这个标签吗?
你不能。这就是 HTML 的工作原理。要知道,JSF 是一个 HTML 代码生成器。 JSF<h:selectOneMenu>
生成一个 HTML<select><option>
。超文本标记语言<select>
元素只会发送value
所选属性<option>
元素。它不会发送其标签。
但这不应该是一个大问题。你就是already知道服务器端的值和标签#{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);
// ...
}
}
with
<h:selectOneMenu value="#{bean.selectedItem}">
<f:selectItems value="#{bean.availableItems.entrySet()}" var="entry"
itemValue="#{entry.key}" itemLabel="#{entry.value}" />
</h:selectOneMenu>
结果
<p>Selected label is #{bean.availableItems[bean.selectedItem]}</p>
另一种方法是将名称和值包装在表示实体的 javabean 对象中,并通过转换器将整个对象设置为值。
也可以看看:
- Our selectOneMenu维基页面 https://stackoverflow.com/tags/selectonemenu/info
- 如何从数据库填充 h:selectOneMenu 的选项? https://stackoverflow.com/questions/6848970/how-to-prepopulate-a-hselectonemenu-with-complex-objects-entities-from-a-db/
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)