This is for JSF 2.0 (Kindly note - this is mojerra implementation and I am not using Icefaces, myfaces etc.)
Consider I just have a drop down in my my form and the dropdown is bound with a List of SelectItems objects which stores value,label and description.
In my Value change actionlistener event how can I access the selected value,label and description. I am able to access only the selected value?
Sample code-
In my xhtml - the dropdown is -
<h:selectOneMenu onchange="submit()" valueChangeListener="#{person.changeDD}" value="#{person.selectedValue}">
<f:selectItems value="#{person.lists}"></f:selectItems>
</h:selectOneMenu>
where person is the name of the 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 a开发者_JS百科nd 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
}
}
Kindly help
In my Value change actionlistener event how can I access the selected value,label and description. I am able to access only the selected value?
That's indeed also only what's been sent by a HTML <select>
element.
You need to maintain a mapping of the available values and SelectItem
s yourself.
@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);
// ...
}
}
you can do that by having variables for them and creating getters and setters for the variables
in your bean for eg. for the description create in your bean
private String description;
public String getDescription(){
return description;
}
public void setDescription(String desc){
description = desc;
}
and similarly for any variable.
Sorry i misunderstood
you can do
//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();
}
}
Best way would be to use Custom objects as values for your SelectItems and implement Custom Converter for them:
http://balusc.blogspot.com/2007/09/objects-in-hselectonemenu.html
In JSF 2 you can implement custom convertors easily like this:
http://www.mkyong.com/jsf2/custom-converter-in-jsf-2-0/
精彩评论