如何从f:selectItems获取标签和值

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对象中,并通过转换器将整个对象设置为值.

也可以看看: