首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何从f:selectItems获取标签和值

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

Stack Overflow用户
提问于 2010-06-29 22:37:44
回答 4查看 96.9K关注 0票数 19

我在一个JSF页面上工作,其中有一个基于List<SelectItem>的下拉列表

代码语言:javascript
复制
<h:selectOneMenu value="#{bean.selectedItem}">
    <f:selectItems value="#{bean.availableItems}" />
</h:selectOneMenu>

我需要获取的值和标签的当前选择的项目。现在我只得到了值。我怎么也能得到标签呢?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-06-29 22:42:30

你不能,这就是HTML的工作方式。您知道,JSF是一个HTML代码生成器。JSF会生成一个<h:selectOneMenu> <select><option>。HTML <select>元素将只发送所选<option>元素的value属性。它不会发送它的标签。

但这不应该是一个大问题。也就是说,您已经知道了#{bean.availableItems}中服务器端的值和标签。要获取关联的标签,您只需通过值作为键获取它即可。我建议让它成为一个Map,这样也可以在f:selectItems中使用它。

基本启动示例:

代码语言:javascript
复制
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);
        // ...
    }
}

使用

代码语言:javascript
复制
<h:selectOneMenu value="#{bean.selectedItem}">
    <f:selectItems value="#{bean.availableItems.entrySet()}" var="entry"
        itemValue="#{entry.key}" itemLabel="#{entry.value}" />
</h:selectOneMenu>

并且在结果中

代码语言:javascript
复制
<p>Selected label is #{bean.availableItems[bean.selectedItem]}</p>

另一种方法是将名称和值都包装在表示实体的javabean对象中,并通过转换器将整个对象设置为值。

另请参阅:

票数 48
EN

Stack Overflow用户

发布于 2012-09-30 05:37:52

我没有使用映射,而是尝试这样做,通过在selectItems标签中使用" ItemValue“属性将ItemValue和ItemLabel放在同一个属性中,对我来说效果很好。ItemLabel中没有提供额外的逗号(@asfas……我有你提到的相同问题,所以我选择了这种方法)。

代码语言:javascript
复制
<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基本上是字符串类型

代码语言:javascript
复制
    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;
    }


}
票数 4
EN

Stack Overflow用户

发布于 2011-02-09 06:19:41

如果值应该是Integer和label字符串,并且在支持bean中两者都需要,该怎么办?在bean中使用Map不起作用,因为JSF将映射键解释为标签。理想情况下,它应该是一个LinkedHashMap,并按数字搜索文本。

似乎颠倒了通过文本(键)搜索数字(值)。如果JSF的某些实现添加了额外的空间来测试或因某些原因更改字母大小写,该怎么办?则无法从map中找到该值。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3141716

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档