0

p:datatable で onEdit を使用してきましたが、正常に動作します。データ テーブルには pagintor があり、ページごとに 5 つのレコードが表示されます。そのため、最初のページ event.getObject で onEdit をクリックすると、Bean で変更された値が取得されます。次のページに移動すると、event.getObject が機能せず、古い値のみが返されます。

ダイアログボックスと同じです。テーブルには、クリックするとリンクがあり、選択した行の値をいくつかのフィールドに入力しているダイアログボックスが開きます。最初のページでは正常に機能し、他のページに移動すると空になります値。

ここに私の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>


<p:dialog id="modalDialog"
                                          header="Delete User?"
                                          modal="true"
                                          resizable="false"
                                          draggable="false"
                                          widgetVar="delUserConf"
                                          >  

                   <h:panelGrid id="display" columns="2" style="width: 150px;">
                                        <h:outputLabel value="Firat Name"  style="font-weight: bold"/>

                                        <h:outputText value="Last Name"  style="border: none"/>

                                    </h:panelGrid>

                                </p:dialog>

編集機能の Bean のコードは次のとおりです。

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

ダイアログをポップアップするフォームにあるリンクを追加しませんでした。また、これは遅延読み込みが原因である可能性があることを読みましたが、それについてはわかりません。テーブルにモデルではなくリストを入力しています。

それを機能させるにはどうすればよいか教えていただけますか?

4

1 に答える 1

0

ビューに変更があるとスコープ ビューが解放されるため、SessionBean スコープに切り替える必要があるかもしれません。SessionBean を試してください。また、ビュー スコープからこのような任意の sessionbean を呼び出すこともできます。ここで、controladorMB は sessionbean です。

 public void detallesPersona() {
    try {
        FacesContext ctx = FacesContext.getCurrentInstance();
        ValueExpression vex = ctx.getApplication().getExpressionFactory().createValueExpression(ctx.getELContext(), "#{controladorMB}", ControladorMB.class);
        ControladorMB gMB = (ControladorMB) vex.getValue(ctx.getELContext());
        this.setSelectedPersona(gMB.getPersonaBean().detallesPersonas(this.selectedPersona.getIdPersona()));

    } catch (Exception e) {
        JsfUtil.addErrorMessage(e, "Error: " + e.getMessage());
    }
}
于 2013-10-25T13:19:09.803 に答える