如何在jsf selectOneMenu中访问所选标签和所选描述,其中selectOneMenu与javax.faces.model.SelectItem对象绑定?

时间:2011-10-06 04:34:09

标签: java jsf jsf-2

这适用于JSF 2.0(请注意 - 这是mojerra实现,我不使用Icefaces,myfaces等。)

考虑我只是在我的表单中有一个下拉列表,下拉列表与一个存储值,标签和描述的SelectItems对象列表绑定。

在我的Value change actionlistener事件中,如何访问选定的值,标签和说明。我只能访问所选的值?

示例代码 -

在我的xhtml中 - 下拉列表是 -

<h:selectOneMenu onchange="submit()" valueChangeListener="#{person.changeDD}" value="#{person.selectedValue}">
    <f:selectItems value="#{person.lists}"></f:selectItems>
</h:selectOneMenu>

其中person是bean的名称

ModelBean-

@ManagedBean(name="person")
@SessionScoped
public class PersonBean implements Serializable{

private String selectedValue;

private List<SelectItem> lists=new ArrayList<SelectItem>(); 
public PersonBean() {
        lists=new ArrayList<SelectItem>();
        lists.add(new SelectItem("1","India","desc1"));
        lists.add(new SelectItem("2","canada","desc2"));
        lists.add(new SelectItem("3","america","desc3"));
    }
//getters and setters


public void changeDD(ValueChangeEvent vce) throws IOException{
        System.out.println("in value change");
        System.out.println("New value-->"+vce.getNewValue().toString());
//I have access only to the selected value and not to the description and label

    }
}   

请帮助

3 个答案:

答案 0 :(得分:3)

  

在我的Value change actionlistener事件中,如何访问所选的值,标签和描述。我只能访问所选的值?

这确实也只是HTML <select>元素发送的内容。 您需要自己维护可用值和SelectItem的映射。

@ManagedBean(name="person")
@SessionScoped
public class PersonBean implements Serializable {

    private String selectedValue;
    private Map<String, SelectItem> availableValues;
    private List<SelectItem> lists; 

    public PersonBean() {
        availableValues = new LinkedHashMap<String, SelectItem>();
        availableValues.put("1", new SelectItem("1", "India", "desc1"));
        availableValues.put("2", new SelectItem("2", "canada", "desc2"));
        availableValues.put("3", new SelectItem("3", "america", "desc3"));
        lists = new ArrayList<SelectItem>(availableValues.values());
    }

    public void changeDD(ValueChangeEvent event) {
        String selectedValue = (String) event.getNewValue();
        SelectItem selectedItem = availableItems.get(newValue);
        // ...
    }

}

答案 1 :(得分:0)

你可以通过为它们设置变量并为变量创建getter和setter来实现这一点

在你的bean中,例如。对于描述在bean中创建

  private String description;

  public String getDescription(){
       return description;
  }

  public void setDescription(String desc){
       description = desc;
  }

和任何变量类似。

对不起我误解了

你可以做到

//String selectedvalue
SelectItem selectedValue;//create getters setter
public void changeDD(ValueChangeEvent vce) throws IOException{
    System.out.println("in value change");
    System.out.println("New value-->"+vce.getNewValue().toString());
    String description = selectedValue.getDescription();

}
}

答案 2 :(得分:0)

最好的方法是使用Custom对象作为SelectItems的值,并为它们实现Custom Converter:
http://balusc.blogspot.com/2007/09/objects-in-hselectonemenu.html

在JSF 2中,您可以像这样轻松实现自定义转换器:
http://www.mkyong.com/jsf2/custom-converter-in-jsf-2-0/