Jsf p:commandbutton不';t调用方法

Jsf p:commandbutton不';t调用方法,jsf,primefaces,commandbutton,Jsf,Primefaces,Commandbutton,我遇到一个问题,我的一个CommandButton没有调用我给它的方法,我不知道为什么: <p:layoutUnit position="center"> <h:form> <p:dialog position="center" widgetVar="benutzerErstellen" visible="true" closable="false" resizable="false" draggable="false">

我遇到一个问题,我的一个CommandButton没有调用我给它的方法,我不知道为什么:

<p:layoutUnit position="center">
    <h:form>
        <p:dialog position="center" widgetVar="benutzerErstellen" visible="true" closable="false" resizable="false" draggable="false">
            <h:panelGrid columns="2" cellpadding="5" styleClass="noBorders">
                <h:outputLabel for="nachname" value="Nachname:" />  
                <p:inputText id="nachname" value="#{benutzerverwaltung.nachname}" required="true"/>
                <h:outputLabel for="vorname" value="Vorname:" />  
                <p:inputText id="vorname" value="#{benutzerverwaltung.vorname}" required="true"/>
                <h:outputLabel for="benutzername" value="Benutzername:" />  
                <p:inputText id="benutzername" value="#{benutzerverwaltung.benutzername}" required="true" validator="#{benutzerverwaltung.benutzerUeberschneidungValidate}"/>
                <h:outputLabel for="teams" value="Teams:" />
                <p:selectCheckboxMenu id="teams" label="Teams" scrollHeight="200" panelStyle="width:300px">
                        <f:selectItems/>
                </p:selectCheckboxMenu>
                <h:outputLabel for="passwort" value="Passwort:" />  
                <p:password id="passwort" feedback="true" value="#{benutzerverwaltung.passwort}" required="true" match="passwortBestaetigung" promptLabel="Bitte geben Sie ein Passwort ein." weakLabel="Schwach" goodLabel="Gut" strongLabel="Stark"/>
                <h:outputLabel for="passwortBestaetigung" value="Passwort bestätigen:" />  
                <p:password id="passwortBestaetigung" value="#{benutzerverwaltung.passwort}" required="true"/>
                <f:facet name="footer">  
                    <p:commandButton id="erstellen" value="Benutzer erstellen" action="#{benutzerverwaltung.erstelleBenutzer()}"/>  
                </f:facet>  
            </h:panelGrid>
        </p:dialog>
        <p:growl/>
    </h:form>
</p:layoutUnit>
benutzerUeberschneidungValidate:

public void benutzerUeberschneidungValidate(FacesContext ctx, UIComponent component, Object value) throws ValidatorException {
    if (benutzerExistiert((String) value) || adminExistiert((String) value)) {
        FacesMessage message = new FacesMessage("Benutzer existiert bereits.");
        message.setSeverity(FacesMessage.SEVERITY_ERROR);
        throw new ValidatorException(message);
    }
}

我试着删除验证器,试着从benutzerErstellen()中删除异常,试着给对话框提供它自己的h:form等等,但是没有任何效果。有人想到了吗?

PrimeFaces 3的早期版本有一个bug,其中commandButton或commandLink如果位于页眉或页脚,则不会触发动作侦听器

请参阅我在底部列出的帖子


我这样解决了这个问题

     <p:dataTable>
...
<p:column>
...
<p:commandButton id="selectButton" update=":form:dataTable" icon="ui-icon-circle-     close" title="Delete" action="#{myBean.doSomething}">
                    <p:ajax event="click" listener="#{mainPageBean.doRemoveEmployee(employee)}"/>
                    </p:commandButton>
...
</p:column>
...
</p:dataTable>

...
...
...
...

一切似乎都很好。尝试在单个页面中隔离此代码并执行它。您确定使用的数据有效吗?尝试删除密码字段的所有必需属性、验证程序和匹配属性。或者将
autoUpdate=“true”
添加到
p:growl
以查看验证错误。@7SpecialGems自JSF 2以来,
操作中使用的方法可以返回void,告诉框架它不会在视图外导航。这是使用ajax调用方法时的首选方式。@7SpecialGems抱歉,这是链接:。@Luiggi Mendoza谢谢-指向泛型问题的链接毫无意义!
     <p:dataTable>
...
<p:column>
...
<p:commandButton id="selectButton" update=":form:dataTable" icon="ui-icon-circle-     close" title="Delete" action="#{myBean.doSomething}">
                    <p:ajax event="click" listener="#{mainPageBean.doRemoveEmployee(employee)}"/>
                    </p:commandButton>
...
</p:column>
...
</p:dataTable>