我正在使用基于下拉的JSF页面 List<SelectItem>:

<h:selectOneMenu value="#{bean.selectedItem}">
    <f:selectItems value="#{bean.availableItems}" />
</h:selectOneMenu>

我需要得到 两个都 当前选择的项目的值和标签。现在,我只能获得价值。我如何也能获得标签?

有帮助吗?

解决方案

你不能。这就是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);
        // ...
    }
}

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

也可以看看:

其他提示

我不使用地图,我尝试过这样的方法,这对我来说是非常有用的,可以通过在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>

基本上发行的ESC是bean Company中的字符串类型

    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;
    }


}

如果该值应为整数和标签字符串,并且在返回Bean时都需要两者怎么办?在BEAN中使用MAP不起作用,因为JSF将映射密钥解释为标签。理想情况下,它将是一个链接hashmap,并通过数字搜索文本。

通过文本(键)倒置为搜索号(值)。如果JSF的某些实现增加了用于测试或字母案例更改的额外空间,该怎么办。然后从MAP中找不到该值。

以下方法也可能对使用价值和标签使用 列表u003CSelectItem>:
在这里,立面,StatesFacade从数据库/企业BEAN获取状态列表。

在视图(XHTML页面):

    <h:selectOneMenu id="statesSelectUi" value="#{applicationBean1.state}">
        <f:selectItems value="#{applicationBean1.stateSelectItems}"/>
        <f:ajax render="selectedItem" event="change" execute="statesSelectUi"/>
    </h:selectOneMenu>
    <br/>
    <br/>
    <h:outputText id="selectedItem" value="#{applicationBean1.selectedState}"/>

在托管bean(applicationbean1.java)中:

private String state;

/**
     * @return the stateSelectItems
     */
    public List<SelectItem> getStateSelectItemsItems() {
        stateSelectItems.add(new SelectItem("-1","--- Select state ---"));
        int statesCount = statesFacade.count();
        List<StateSelectItems> states;
        states = statesFacade.findAll();
        for (int i = 0; i < statesCount; i++) {
            stateSelectItems.add(new SelectItem(states.get(i).getStateSlNo(), states.get(i).getStateName()));
        }
        return stateSelectItems;
    }


       public String getSelectedState(){
       if("".equals(getState()) || getState() ==null){
        return "";
       }else{
        return "Selected State : " + getStateSelectItems.get(Integer.parseInt(getState())).getValue()+", "++ getStateSelectItems.get(Integer.parseInt(getState())).getLabel();
       }
    }

这将解决问题。

private String getLabel(List<SelectItem> list, String selection) {
    String label = "";
    for (int i = 0; i < list.size(); i++) {
        if(selection.equals((String)list.get(i).getValue())) {
            label = (String)list.get(i).getLabel();
            break;
        }
    }

    return label;
}

在您的示例中,您将以“列表”和“选择”为“列表”中传递。此方法将返回对应于SelectedItem的标签值。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top