未设置 Primefaces 选定行

Primefaces Selected Row is not set

我确实尝试了很多方法,但找不到解决我问题的方法。 我的问题是,单击所选行的按钮以查看对话框不会设置 selecteduser 对象。它似乎是空的。 感谢您的时间。这是我的 xhtml 页面。

<ui:composition template="/pages/admin/admin.xhtml"
                xmlns="http://www.w3.org/1999/xhtml"
                xmlns:ui="http://java.sun.com/jsf/facelets"
                xmlns:f="http://java.sun.com/jsf/core"
                xmlns:h="http://java.sun.com/jsf/html"
                xmlns:p="http://primefaces.org/ui">

    <ui:define name="center">
        <h:form id="updateform">
            <p:growl id="messages"/>
            <p:panel id="pnlUpdateUser" header="#{menu['menu.admin.usermanager.updateuser']}">
                <p:panelGrid columns="2" styleClass="cm_ui-panel-grid">
                    <p:outputLabel value="#{menu['menu.admin.createuser.name']}" styleClass="cm_ui-output-label"/>
                    <p:inputText styleClass="cm_input-text" value="#{userMB.userQuery.name}"/>

                    <p:outputLabel value="#{menu['menu.admin.createuser.surname']}" styleClass="cm_ui-output-label"/>
                    <p:inputText styleClass="cm_input-text" value="#{userMB.userQuery.surname}" />

                    <f:facet name="footer">
                        <p:commandButton value="#{menu.search}" action="#{userMB.queryUsers}" update=":userresultform"/>
                    </f:facet>
                </p:panelGrid>
            </p:panel>
        </h:form>
        <h:form id="userresultform">
            <p:dataTable id="userresulttable" var="u" value="#{userMB.users}"
                         rendered="#{(userMB.users.size() > 0)}">
                <f:facet name="header">
                    <p:outputLabel value="#{menu['menu.admin.updateuser.list']}"/>
                </f:facet>
                <p:column headerText="#{menu['menu.admin.createuser.id']}">
                    <h:outputText value="#{u.id}" />
                </p:column>
                <p:column headerText="#{menu['menu.admin.createuser.name']}">
                    <h:outputText value="#{u.name}" />
                </p:column>
                <p:column headerText="#{menu['menu.admin.createuser.surname']}">
                    <h:outputText value="#{u.surname}" />
                </p:column>
                <p:column headerText="#{menu['menu.admin.createuser.grade']}">
                    <h:outputText value="#{u.grade}" />
                </p:column>
                <p:column style="width:32px;text-align: center">
                    <p:commandButton update=":userresultform:useredit" oncomplete="PF('userEditDialog').show()" icon="ui-icon-search" title="guncelle">
                        <f:setPropertyActionListener value="#{u}" target="#{userMB.selectedUser}" />
                    </p:commandButton>
                </p:column>
            </p:dataTable>
            <p:dialog header="Guncelleme" widgetVar="userEditDialog" modal="true" showEffect="fade" hideEffect="fade" resizable="false"
                    appendTo="@(body)" dynamic="true">
                <p:outputPanel id="useredit" style="text-align:center;">
                    <p:panelGrid  columns="2" rendered="#{not empty userMB.selectedUser}" columnClasses="label,value">

                        <h:outputText value="Ad" />
                        <h:outputText value="#{userMB.selectedUser.name}" />

                        <h:outputText value="Soyad:" />
                        <h:outputText value="#{userMB.selectedUser.surname}" />

                        <h:outputText value="Unvan" />
                        <h:outputText value="$#{userMB.selectedUser.grade}" />
                    </p:panelGrid>
                </p:outputPanel>
            </p:dialog>
        </h:form>
    </ui:define>
</ui:composition>

认为问题出在 appendTo="@(body)"

请将进程添加到 commandButton

 <p:commandButton update=":userresultform:useredit" process="@this" oncomplete="PF('userEditDialog').show()" icon="ui-icon-search" title="guncelle">
    <f:setPropertyActionListener value="#{u}" target="#{userMB.selectedUser}" />
</p:commandButton>

并且对于 p:dialog 删除 appendTo 并尝试

<p:dialog header="Guncelleme" widgetVar="userEditDialog" modal="true" showEffect="fade" hideEffect="fade" resizable="false"
                dynamic="true">

如果您使用append to body 是true,您需要在对话框中添加一个表单。但也要确保在你的 xhtml 中,你没有嵌套表单,因为它们在对话框 'moved' 之前最终嵌套在客户端上,这是无效的 html