当我使用paginator转到p:datatable的下一页时,p:对话框显示空值

时间:2013-10-24 15:58:27

标签: jsf jsf-2 primefaces datatable

我一直在p:datatable中使用onEdit,它运行正常。我的数据表有一个pagintor,每页显示5条记录。所以当我点击第一页中的onEdit时,event.getObject获取更改后的值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();
}

我没有添加我在弹出对话框的表单中的链接。另外我读到这可能是因为Lazy加载而我不确定它。我用列表填充我的表而不是模特。

你能让我知道我该怎么办才能让它发挥作用吗?

1 个答案:

答案 0 :(得分: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());
    }
}