1

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)

選択メニューに整数を表示できないようです。どうすればこの問題を解決できますか?

4

2 に答える 2

5

<f:selectItems>タグの場合、属性valueは使用可能なすべてのアイテムのリストを表す必要があります。(itemValueおよび) 属性は、リストの個々の項目を表す属性が指定されitemLabelている場合にのみ使用できます。var

あなたの特定の問題は、あなたが使用したために引き起こされます

<f:selectItems value="#{AddAccountController.usergroups.groupid}" />

これは構文的に無効です。は、最初のアイテムのように、整数インデックスによってのみさらにアクセスできる#{AddAccountController.usergroups}a を返します。しかし、これは有効なインデックス値ではないため、これを使用しようとしました。しかし、この方法でアクセスするべきではありません。List#{AddAccountController.usergroups[0]}groupidInteger

これは適切な使用法です:

<f:selectItems value="#{AddAccountController.usergroups}" var="usergroup"
    itemValue="#{usergroup.groupid}" itemLabel="#{usergroup.groupname}" />

以下も参照してください。

于 2012-07-15T12:20:56.667 に答える
1

groupIdBeanのint groupIdフィールドにバインドしようとしましたが、それは無効です

于 2012-07-15T12:16:49.980 に答える