我正在学习JSF和bean。
我有以下代码:
public class Example {
private List<ExampleObject> listExampleObject;
//Get and set from list...
}
public class ExampleObject extends ExampleObjectExtend {
private String exampleAttribute;
//Get and set from attribute.
}
public class ExampleObjectExtend {
private String extendedAttribute;
//Get and set from extendedAttribute..
}
我需要显示一个itemLabel=exampleAttribute和itemValue=extendedAttribute的selectList。
我做了以下操作:
<h:selectOneMenu id="listExample">
<f:selectItems value="#{myBean.listExampleObject}" var="example" itemValue="#{example.extendedAttribute}" itemLabel="#{example.exampleAttribute}"/>
</h:selectOneMenu>
关键是itemLabel被正确地显示了,但是选项控件的value属性被像这样显示:Example@5a05a935(我检查这个值由chrome调试器和firebug)
为什么会发生这种情况?
谢谢
更新:我已经实现了Jitesh提供的解决方案,系统现在可以工作了。非常感谢!
您的代码应该可以工作。但我认为你可以通过以下方式达到同样的效果,
xhtml:<h:selectOneMenu id="listExample">
<f:selectItems value="#{myBean.ddl_example_options}"/>
</h:selectOneMenu>
JSF Managed Bean:
public class MyBean implements Serializable{
List<SelectItem> ddl_example_options;
String ddl_example;
public List<SelectItem> getDdl_example_options() {
return ddl_example_options;
}
public void setDdl_example_options(List<SelectItem> ddl_example_options) {
this.ddl_example_options = ddl_example_options;
}
public String getDdl_example() {
return ddl_example;
}
public void setDdl_example(String ddl_example) {
this.ddl_example = ddl_example;
}
private void setDdl_example(){
ddl_example_options=new ArrayList<>();
ddl_example_options.add(new SelectItem("1","Option-1"));
ddl_example_options.add(new SelectItem("2","Option-2"));
}
@PostConstruct
public void init(){
setDdl_example();
}
public MyBean() {
}
}
创建签名为public List<SelectItem>
的方法,为每个ExampleObject设置SelectItem,并在f:selectItems
的value
属性中使用此方法