7

ユーザーがテーブル自体の行データを編集できるようにする素数面の機能を使用しようとしています。このリンクをたどってそれを達成しました:

http://www.primefaces.org/showcase/ui/datatableRowEditing.jsf

ユーザーを編集すると、入力された新しい値は Bean に送信されません。古い値のみが表示されます。

JSFの私のコード:

<p:dataTable value="#{mybean.userList}"
        var="item"
        id="dataTab"
        widgetVar="usersTable"
        tableStyleClass="data"  paginator="true" rows="5"  
        filteredValue="#{userController.filteredUsers}"
        editable="true"
        rowKey="#{item}">

    <p:ajax event="rowEdit"   listener="#{mybean.onEdit}" update=":userForm:growl" />  
    <p:ajax event="rowEditCancel" listener="#{mybean.onCancel}" update=":userForm:growl" /> 
    <f:facet name="header">
        <p:outputPanel>  
            <h:outputText value="Search all fields:" />  
            <p:inputText id="globalFilter"     onkeyup="('usersTable').filter()"   style="width:150px" />  
        </p:outputPanel>     
    </f:facet>


    <p:column sortBy="#{item.firstName}" filterBy="#{item.firstName}" 
        filterMatchMode="startsWith">
        <p:cellEditor> 
            <f:facet name="header">  
                <h:outputText value="First Name" />  
            </f:facet>
            <f:facet name="output">
                <h:outputText  value="#{item.firstName}" />
            </f:facet>
            <f:facet name="input">  
                <p:inputText value="#{item.firstName}" style="width:100%"/>  
            </f:facet>  
        </p:cellEditor>
    </p:column>
    <p:column  sortBy="#{item.lastName}" filterBy="#{item.lastName}" filterMatchMode="startsWith">
        <p:cellEditor> 
            <f:facet name="header">  
                <h:outputText value="Last Name" />  
            </f:facet>

            <p:column headerText="Update" style="width:6%">  
                <p:rowEditor />  
            </p:column>    


</p:dataTable>

Bean の私のコード:

public String onEdit(RowEditEvent event) {
    User user=(User)event.getObject());
    user.getFirstName();
}

UI でリストを取得するための Bean のコード:

 public List<UserBean> getUsersList(){
        List<UserBean> retval = new ArrayList<>();            
        for (Object[] tuple : myFacade.getUserList()) {
            UserBean ub = new UserBean();
            ub.setFirstName((String) tuple[0]);
            ub.setLastName((String)tuple[1]);
            ub.setEmailAddress((String)tuple[2]);
            ub.setOfficeNumber((String)tuple[3]);
            ub.setRole((String)tuple[4]);                
            retval.add(ub);
        }
        return retval;
    }

いくつかの投稿で提供された提案を試しましたが、うまくいきませんでした。新しい値を取得する方法を誰か教えてください。私はグラスフィッシュ 4.0、プライムフェイス 3.5 を使用しています。

4

1 に答える 1

9

私は問題を理解することができました..ゲッターメソッドでリストを取得するたびに、データベースを呼び出してデータをロードしています..しかし、これはリストがnullの場合にのみ行う必要があります.次のコードはあなたを与えます.鮮明な画像:

public List<UserBean> getUsersList(){


        if(retval == null)
        {
            retval = new ArrayList<>();

            for (Object[] tuple : myFacade.getUserList()) {
            UserBean ub = new UserBean();
            ub.setFirstName((String) tuple[0]);
            ub.setLastName((String)tuple[1]);
            ub.setEmailAddress((String)tuple[2]);
            ub.setOfficeNumber((String)tuple[3]);
            ub.setRole((String)tuple[4]);

            retval.add(ub);
        }
        }
        return retval;
    }

したがって、getUsersList は p:datatable の var の値であり、onEdit を呼び出すと、リストが null であるかデータベース呼び出しを行うかデータベースを呼び出さないかをチェックします。

于 2013-10-03T14:47:09.090 に答える