Primefaces commandButton im inneren dialog nicht feuern backing-bean-Methode

Ich habe gerade angefangen zu lernen, JSF und PrimeFaces, und sobald ich ein problem zu lösen (mit eurer Hilfe), ein anderer entsteht. Ich habe eine datatable zeigt einige Daten für meine Anwendung Benutzer, der in der letzten Spalte, eine Befehlsschaltfläche startet ein dialog, in dem die entsprechenden Daten bearbeitet werden. Der dialog tatsächlich interagiert mit der backing-bean, da die Felder korrekt vorkompilierte mit den vorhandenen Daten, aber die "änderungen Senden" commandButton nicht das Feuer die richtige editUser() Methode!

Ich habe überall gesucht nach einer Lösung für mein problem, aber keiner der threads auf der PrimeFaces-Foren noch irgendeine Frage auf Stack Overflow hat mir geholfen: ich habe versucht, alle Kombinationen von action, actionListener, innere <h:form>, äußere <h:form> auch die gefürchtete verschachtelte <h:form>, aber die zugrunde liegende Methode ist noch nicht genannt.

Danke an Euch alle, Leute!

BEARBEITEN: ich habe einige mehr xhtml. Nur um klar zu sein: in der datatable ich bin Implementierung sowohl Einzel-und mehrfach-Auswahl-Mechanismen. Die einzigen die Auswahl erfolgt durch die editButton in der letzten Spalte und löst die editDialog dass mir Schmerzen, während die mehrfach-Auswahl aktiviert ist, indem Sie die Kontrollkästchen in der ersten Spalte und wird gezielt durch eine Befehlsschaltfläche unten in der Tabelle, löscht alle ausgewählten Benutzer; natürlich speichern Sie die Auswahl in verschiedenen Bereichen in der backing-bean (selectedUser und selectedUsers[], beziehungsweise).

xhtml-Datei

<h:form id="tableForm">
    <p:dataTable id="userList" var="user" value="#{userListBean.userList}"
        selection="#{userListBean.selectedUsers}" rowKey="#{user.username}">

        <!-- this is a checkbox column I use for multiple selection -->
        <p:column selectionMode="multiple" style="width:2%"/>

        <!-- other datatable columns -->

        <!-- this is the button column that triggers the dialog -->
        <p:column style="width:4%">
            <p:commandButton id="editButton" update=":tableForm:editUserData"
                oncomplete="PF('editDialog').show()" title="Edit" icon="ui-icon-pencil">
                <f:setPropertyActionListener target="#{userListBean.selectedUser}"
                    value="#{user}" />
            </p:commandButton>
        </p:column>
    </p:datatable>

    <p:dialog id="editDlg" widgetVar="editDialog" header="Edit User"
        showEffect="fade" hideEffect="fade" modal="true" dynamic="true">
        <h:panelGrid columns="6" id="editUserData">

            <p:outputLabel for="editUsername">Username:</p:outputLabel>
            <p:inputText disabled="true" id="editUsername" value="#{userListBean.selectedUser.username}" />
            <p:message for="editUsername" />

            <!-- and other fields like that -->

        </h:panelGrid>

        <p:commandButton id="submitChanges" action="#{userListBean.editUser()}"
            value="Submit changes" oncomplete="PF('editDialog').hide();" /> 
    </p:dialog>
</h:form>

Backing bean

@ManagedBean(name="userListBean")
@ViewScoped
public class UserListBean {
    private UserDTO selectedUser;

    public UserListBean() {

    }

    //some methods...

    public String editUser() {
        System.out.println("------------------ EDIT TRIGGERED! -------------------");
        System.out.println(selectedUser.getUsername());
        //this stuff never gets printed, so the method is never called!
    }

    //getters and setters
}
  • es wäre nett, wenn du posten könntest mehr von deinen xhtml
  • Hinzugefügt mehr xhtml und einige zusätzliche Notizen! Nochmals vielen Dank. @LeonardoKenji
  • Dialog muss seine eigene form.
  • Tatsächlich, @BalusC, habe ich es herausgefunden! Ich hatte bereits versucht, indem Sie den dialog in seiner eigenen form, sowie das einhalten der dialog von Formen und setzen einen inneren dialog, aber ohne Erfolg. Ich habe angeordnet, Anordnung, arbeitete für mich in meiner Antwort. Vielen Dank trotzdem! 🙂
Schreibe einen Kommentar