我在使用JSF的selectOneMenu时遇到了问题。
我一直在尝试类似下面的事情,但似乎没有人工作......
有人可以帮助我吗?
JSP:
<h:selectOneMenu value="#{myBean.listCats.desc}" id="desc">
<f:selectItems value="#{myBean.selectAllCats}" />
</h:selectOneMenu>
为myBean:
(...)
public Collection<SelectItem> selectAllCats() throws (some exceptions...){
this.listCats = this.controller().selectAllCats();
Collection<SelectItem> toReturn = new ArrayList<SelectItem>();
for( int i = 0; i<this.listCats.size(); i++){
toReturn.add( new SelectItem( this.listCats.get(i).getCod(), this.listCats.get(i).getDesc()));
}
return toReturn;
}
(...)
更多信息:
List<Cats> listCats = new List<Cats>();
//-------------------------------------
class Cats{
private int cod; // both with getters and setters
private String desc;
}
提前致谢!
编辑:
我忘了说我一直收到以下错误:
'#{myBean.selectAllCats}'在类型上找不到属性'selectAllCats' path.to.myBean
答案 0 :(得分:3)
'#{myBean.selectAllCats}'在类型path.to.myBean上找不到属性'selectAllCats'
对于属性,您应该提供有效的getter方法。你没有任何一个,因为例外是试图告诉你。 selectAllCats
属性的有效getter方法应该如下所示。
public Collection<SelectItem> getSelectAllCats() {
return selectAllCats;
}
请注意,在getter中执行业务工作是不好的做法。你应该在bean的(post)构造函数中这样做。
答案 1 :(得分:1)
List<Cats> listCats = new List<Cats>();
和
myBean.listCats.desc
列表没有名为desc
的属性。 Cats
有listCats
,但{{1}}是一个列表。
答案 2 :(得分:0)
方法
public Collection<SelectItem> selectAllCats() throws (some exceptions...)
返回Collection
,JSF 1.2中的<h:selectOneMenu>
不支持。
此方法应返回List
,Map
或Object[]
,因此其标志应重写为:
public List<SelectItem> selectAllCats() throws (some exceptions...)
除此之外,你还会在这一行遇到另一个问题:
<h:selectOneMenu value="#{myBean.listCats.desc}" id="desc">
listCats
是由List
组成的Cats
(应使用Cat
重命名),此列表没有desc()
方法。这条线也应该像这样修改(根据你的需要修改:
<h:selectOneMenu value="#{myBean.listCats.get(0).desc}" id="desc">
答案 3 :(得分:0)
我不知道标签信息页面,这就是为什么我没有在那里搜索我的答案。
您可以在此链接中找到它: https://stackoverflow.com/tags/selectonemenu/info
或者:
顺便问一下,你看过了标签信息页吗? 你自己提出问题的[selectonemenu]标签?将它悬停 用鼠标直到出现一个黑框,然后点击其中 信息链接。 - BalusC
我正在寻找的答案位于该信息页面的动态列表部分, 以下引用以供进一步参考:
动态列表
您可以用来显示动态列表 填充在支持bean中。您可以使用 javax.faces.model.SelectItem表示一对项值和 标签
查看:
<h:form>
<h:selectOneMenu value="#{bean.selectedItem}">
<f:selectItem itemValue="#{null}" itemLabel="-- select one --" />
<f:selectItems value="#{bean.availableItems}" />
</h:selectOneMenu>
<h:commandButton value="Submit" action="#{bean.submit}" /> </h:form>
型号:
private String selectedItem; // +getter +setter private
List<SelectItem> availableItems; // +getter (no setter necessary)
@PostConstruct public void init() {
availableItems = new ArrayList<SelectItem>();
availableItems.add(new SelectItem("foo", "Foo label"));
availableItems.add(new SelectItem("bar", "Bar label"));
availableItems.add(new SelectItem("baz", "Baz label"));
}
availableItems也可以是SelectItem []。如果省略该项目 标签
因此可以将项值用作选项值和选项标签, 那么你也可以使用List或String []。
private String selectedItem; // +getter +setter private List<String>
availableItems; // +getter (no setter necessary)
@PostConstruct public void init() {
availableItems = Arrays.asList("foo", "bar", "baz");
}
谢谢!