0

我一直在 p:datatable 中使用 onEdit,它工作正常。我的数据表有一个分页器,每页显示 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>

这是我的 bean 中用于编辑功能的代码:

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

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

你能让我知道我应该怎么做才能让它工作吗?

4

1 回答 1

0

也许您应该切换到 SessionBean 范围,因为范围视图会在视图发生更改时被释放。试试 SessionBean。您也可以像这样从视图范围调用任何会话bean,其中 controladorMB 是会话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());
    }
}
于 2013-10-25T13:19:09.803 回答