数据表将错误的数据发送到辅助bean

时间:2015-03-23 04:17:08

标签: jsf primefaces datatable

我有一个数据表(p:datatable),每行都有过滤器和一个操作按钮。现在,当我单击操作按钮时,错误的数据将传递给bean。

实际上,当单击Edit按钮时,将调用bean的startupdate方法并将参数传递给它。

在正常情况下,如果没有任何过滤器,右侧员工将获得通行证并打开对话框并显示正确的值。但是,当我应用过滤器时,它始终是第一行传递,对话框打开并显示第一行员工的详细信息。

我确实设置了rowKey。

    <h:form id="wrapform">
<p:dataTable style="margin-top:20px" widgetVar="emptable" id="empdata" var="emp" rowKey="#{emp.empdto.id}" value="#{employeeMaintainanceController.allUsersWithDetails}" filteredValue="#{employeeMaintainanceController.allUsersWithDetails_filtered}">

    <f:facet name="header">
        <p:outputPanel>
            <h:outputText value="Search in any column:" />
            <p:inputText id="globalFilter" onkeyup="emptable.filter()" style="width:150px; margin-left: 10px;" />
            </p:outputPanel>
                </f:facet>

    <p:column headerText="Employee-Id" filterBy="#{emp.userdto.id}" filterMatchMode="contains">
        <h:outputText value="#{emp.userdto.id}" />
    </p:column>

    <p:column headerText="First Name" filterBy="#{emp.userdto.firstName}" filterMatchMode="contains">
        <h:outputText value="#{emp.userdto.firstName}" />
    </p:column>

    <p:column headerText="Last Name" filterBy="#{emp.userdto.lastName}" filterMatchMode="contains">
        <h:outputText value="#{emp.userdto.lastName}" />
    </p:column>

    <p:column headerText="E-mail">
        <h:outputText value="#{emp.userdto.email}" />
    </p:column>

    <p:column headerText="Date of Joining">
        <h:outputText value="#{emp.empdto.doj}" />
    </p:column>

    <p:column headerText="Team" filterMatchMode="contains" filterBy="#{teamMaintainanceController.getTeamById(emp.empdto.teamid)}">
        <h:outputText value="#{teamMaintainanceController.getTeamById(emp.empdto.teamid)}" />
    </p:column>

    <p:column headerText="Office" filterBy="#{employeeMaintainanceController.getLocName(emp.userdto.primaryOfficeSeq)}" filterMatchMode="contains">
        <h:outputText value="#{employeeMaintainanceController.getLocName(emp.userdto.primaryOfficeSeq)}" />
    </p:column>

    <p:column headerText="Is Active?">
        <h:outputText value="#{(emp.empdto.dor == null)?'Active':'Already Resigned'}" />
    </p:column>

    <p:column headerText="Edit">
         <p:commandButton value="Edit/Move/Delete"
                title="Edit"
                actionListener="#{employeeMaintainanceController.startUpdate(emp)}"
                ajax="true" process="@this" oncomplete="dlg2.show();" update=":entryform"/>
    </p:column>
</p:dataTable>
</h:form>

<p:dialog header="Change Employee Details, Move him to different Teams, Transfer him to different Locations" widgetVar="dlg2" modal="true" >
    <h:form id="entryform">
    <table id="empdatatable">
    <p:growl id="growl" showDetail="true"/>
            <tr><td><p:outputLabel for="searchedid" value="ID" rendered="#{employeeMaintainanceController.wrapemp !=null}"></p:outputLabel></td><td><h:outputText id="searchedid" value="#{employeeMaintainanceController.wrapemp.userdto.id}"></h:outputText></td></tr>
            <tr><td><p:outputLabel for="searchedfname" value="First Name" rendered="#{employeeMaintainanceController.wrapemp !=null}"></p:outputLabel></td><td><h:outputText id="searchedfname" value="#{employeeMaintainanceController.wrapemp.userdto.firstName}"></h:outputText></td></tr>
            <tr><td><p:outputLabel for="searchedlname" value="Last Name" rendered="#{employeeMaintainanceController.wrapemp !=null}"></p:outputLabel></td><td><h:outputText id="searchedlname" value="#{employeeMaintainanceController.wrapemp.userdto.lastName}"></h:outputText></td></tr>
            <tr><td><p:outputLabel for="searchedemail" value="E-Mail" rendered="#{employeeMaintainanceController.wrapemp !=null}"></p:outputLabel></td><td><h:outputText id="searchedemail" value="#{employeeMaintainanceController.wrapemp.userdto.email}"></h:outputText></td></tr>
            <tr><td><p:outputLabel for="loc" value="Office Location" rendered="#{employeeMaintainanceController.wrapemp !=null}"></p:outputLabel></td><td><p:selectOneMenu id="loc" value="#{employeeMaintainanceController.wrapemp.userdto.primaryOfficeSeq}" rendered="#{employeeMaintainanceController.wrapemp !=null}">
                    <f:selectItem itemLabel="Select One" itemValue="-1" />
                    <f:selectItems value="#{employeeMaintainanceController.officeList}" var="theme" itemLabel="#{theme.name}" itemValue="#{theme.seq}"/>
            </p:selectOneMenu></td></tr>
           <tr><td><p:outputLabel for="searcheddoj" value="Date Of Joining" rendered="#{employeeMaintainanceController.wrapemp !=null}"></p:outputLabel></td><td><h:outputText id="searcheddoj" value="#{employeeMaintainanceController.wrapemp.empdto.doj}"></h:outputText></td></tr>
            <tr><td><p:outputLabel for="cal1" value="Date Of Resignation" rendered="#{employeeMaintainanceController.wrapemp !=null}"></p:outputLabel></td><td><p:calendar id="cal1" value="#{employeeMaintainanceController.wrapemp.empdto.dor}" rendered="#{employeeMaintainanceController.wrapemp !=null}" /></td></tr>
            <tr><td><p:outputLabel for="chk_isadmin" value="IS Admin?" rendered="#{employeeMaintainanceController.wrapemp !=null}"></p:outputLabel></td><td><p:selectBooleanCheckbox id="chk_isadmin" value="#{employeeMaintainanceController.isadmin}" rendered="#{employeeMaintainanceController.wrapemp !=null}"></p:selectBooleanCheckbox> </td></tr>
            <tr><td><p:outputLabel for="sel_team" value="TeamName" rendered="#{employeeMaintainanceController.wrapemp !=null}"></p:outputLabel></td><td><p:selectOneMenu id="sel_team" value="#{employeeMaintainanceController.wrapemp.empdto.teamid}" rendered="#{employeeMaintainanceController.wrapemp !=null}">
                    <f:selectItem itemLabel="Select One" itemValue="-1" />
                    <f:selectItems value="#{teamMaintainanceController.allTeams}" var="theme" itemLabel="#{theme.name}" itemValue="#{theme.id}"/>
            </p:selectOneMenu></td></tr>
            <tr><td><p:commandButton value="Edit" ajax="false" actionListener="#{employeeMaintainanceController.updateemp}" update=":wrapform" oncomplete="dlg2.hide();" rendered="#{employeeMaintainanceController.wrapemp !=null}"></p:commandButton></td><td><p:commandButton value="Delete This Employee" ajax="false" actionListener="#{employeeMaintainanceController.deleteemp}" update=":wrapform" oncomplete="dlg2.hide();" rendered="#{employeeMaintainanceController.wrapemp !=null}"></p:commandButton></td></tr>
        </table>
    </h:form>
</p:dialog>

更新 这个问题更加奇怪。仅当筛选行的数量只有一个时,才会出现此问题。还有其他任何东西都可以。

0 个答案:

没有答案