Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jsf 当我使用paginator转到p:datatable的下一页时,p:dialog显示空值_Jsf_Jsf 2_Primefaces_Datatable - Fatal编程技术网

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

Jsf 当我使用paginator转到p:datatable的下一页时,p:dialog显示空值,jsf,jsf-2,primefaces,datatable,Jsf,Jsf 2,Primefaces,Datatable,我一直在p:datatable中使用onEdit,效果很好。我的数据表有一个pagintor,每页显示5条记录。因此,当我在第一页事件中单击onEdit时,getObject会在bean中获得更改的值。现在,当我转到下一页时,event.getObject不起作用,只返回旧值 与对话框相同。在表中,单击时我有一个链接,打开了一个对话框,我正在用所选行的值填充几个字段。它在第一页工作正常,当我导航到其他页面时,会给出空值 以下是我的jsf代码: <p:dataTable value="#{

我一直在p:datatable中使用onEdit,效果很好。我的数据表有一个pagintor,每页显示5条记录。因此,当我在第一页事件中单击onEdit时,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>
我没有在弹出对话框的表单中添加链接。我还了解到这可能是因为延迟加载,我对此不确定。我用列表填充我的表,而不是模型


你能告诉我该怎么做才能让它工作吗?

也许你应该切换到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());
    }
}

使用视图范围的bean是因为使用了会话范围的bean,所以您使用了什么样的管理bean?如果我们使用的是viewscope bean,还有其他选择吗?只要用户停留在同一个视图上,在viewscope中注册的托管bean仍然可用。离开该视图将导致取消分配在该视图作用域中注册的bean。如果要保留数据,请使用应用程序或会话范围
 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());
    }
}