这适用于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
}
}
请帮助
答案 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/