我在一个JSF页面上工作,其中有一个基于List<SelectItem>
的下拉列表
<h:selectOneMenu value="#{bean.selectedItem}">
<f:selectItems value="#{bean.availableItems}" />
</h:selectOneMenu>
我需要获取和的值和标签的当前选择的项目。现在我只得到了值。我怎么也能得到标签呢?
发布于 2010-06-29 22:42:30
你不能,这就是HTML的工作方式。您知道,JSF是一个HTML代码生成器。JSF会生成一个<h:selectOneMenu>
<select><option>
。HTML <select>
元素将只发送所选<option>
元素的value
属性。它不会发送它的标签。
但这不应该是一个大问题。也就是说,您已经知道了#{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);
// ...
}
}
使用
<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对象中,并通过转换器将整个对象设置为值。
另请参阅:
发布于 2012-09-30 05:37:52
我没有使用映射,而是尝试这样做,通过在selectItems标签中使用" ItemValue“属性将ItemValue和ItemLabel放在同一个属性中,对我来说效果很好。ItemLabel中没有提供额外的逗号(@asfas……我有你提到的相同问题,所以我选择了这种方法)。
<h:selectOneMenu value="#{company.issueDesc}" required="true" onchange="submit()">
<f:selectItem itemLabel="-- Select a Issue -- " itemValue="0"/>
<f:selectItems value="#{company.issueList}" var="model" itemLabel="#{model.IssueDesc}" itemValue="#{model.Code},#{model.IssueDesc}" >
</f:selectItems>
</h:selectOneMenu>
在Bean公司中,IssueDesc基本上是字符串类型
public Class Company{
private String issueDesc; // getters and setters
private int code; // getters and setters
private List<T>issueList; // getters and setters.
public void getLblandVal(){
String desc=getIssueDesc();
String[] str_ary=desc.split(",");
String s1=str_ary[0];
String s2=str_ary[1];
// parse **s1** to int;
}
}
发布于 2011-02-09 06:19:41
如果值应该是Integer和label字符串,并且在支持bean中两者都需要,该怎么办?在bean中使用Map不起作用,因为JSF将映射键解释为标签。理想情况下,它应该是一个LinkedHashMap,并按数字搜索文本。
似乎颠倒了通过文本(键)搜索数字(值)。如果JSF的某些实现添加了额外的空间来测试或因某些原因更改字母大小写,该怎么办?则无法从map中找到该值。
https://stackoverflow.com/questions/3141716
复制相似问题