我有一个要在JSF页面中显示的用户组列表:
<h:panelGroup>
<h:selectOneMenu value="#{AddAccountController.formMap['GROUPID']}">
<f:selectItem itemValue="#{null}" itemLabel="-- select one --" />
<f:selectItems value="#{AddAccountController.usergroups.groupid}" itemValue="#{AddAccountController.usergroups.groupname}" />
</h:selectOneMenu>
</h:panelGroup>
这是生成列表的托管bean代码:
private List<listGroupsObj> usergroups = new ArrayList<>();
......
public void initListGroups() throws SQLException {
if (ds == null) {
throw new SQLException("Can't get data source");
}
/* Initialize a connection to Oracle */
Connection conn = ds.getConnection();
if (conn == null) {
throw new SQLException("Can't get database connection");
}
/* With SQL statement get all settings and values */
PreparedStatement ps = conn.prepareStatement("SELECT * from USERGROUPS");
try {
//get data from database
ResultSet result = ps.executeQuery();
while (result.next()) {
/* Put the the data from Oracle into Hash Map */
usergroups.add(new listGroupsObj(result.getInt("GROUPID"), result.getString("GROUPNAME")));
}
} finally {
ps.close();
conn.close();
}
}
public class listGroupsObj {
private int groupid;
private String groupname;
public listGroupsObj(int groupid, String groupname){
this.groupid = groupid;
this.groupname = groupname;
}
public int getGroupid()
{
return groupid;
}
public void setGroupid(int groupid)
{
this.groupid = groupid;
}
public String getGroupname()
{
return groupname;
}
public void setGroupname(String groupname)
{
this.groupname = groupname;
}
@Override
public String toString()
{
return groupname;
}
}
// Get the list with User Groups
public List<listGroupsObj> getusergroups() {
return usergroups;
}
当我打开JSF页面时,出现此错误:
java.lang.NumberFormatException: For input string: "groupid"
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
at java.lang.Integer.parseInt(Integer.java:492)
at java.lang.Integer.parseInt(Integer.java:527)
看来我无法在选择菜单中显示整数。
我该如何解决这个问题?
最佳答案
对于<f:selectItems>
标记,value
属性必须代表所有可用项目的列表。 itemValue
(和itemLabel
)属性只能在指定var
属性(表示列表的每个单独项目)时使用。
您的特定问题是由于您使用
<f:selectItems value="#{AddAccountController.usergroups.groupid}" />
这在语法上是无效的。
#{AddAccountController.usergroups}
返回一个List
,该整数只能由整数索引(如#{AddAccountController.usergroups[0]}
的第一项)进一步访问。但是您尝试使用不是有效索引值的groupid
,因为它不是Integer
。但是您不应该以这种方式访问它。这是正确的用法:
<f:selectItems value="#{AddAccountController.usergroups}" var="usergroup"
itemValue="#{usergroup.groupid}" itemLabel="#{usergroup.groupname}" />
也可以看看:
Our
h:selectOneMenu
wiki page