2013-11-22 6 views
0

У меня проблема, где один из моих commandbuttons не вызывает метод, который я дал, и я понятия не имею, почему:р: 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> 

Это соответствующий код:
erstelleBenutzer:

public void erstelleBenutzer(){ 
    Benutzer benutzer = new Benutzer(); 
    System.out.println(vorname); 
    benutzer.setVorname(vorname); 
    benutzer.setNachname(nachname); 
    benutzer.setBenutzername(benutzername); 
    benutzer.setPasswort(passwort); 
    this.benutzer.add(benutzer); 
    FacesMessage message = new FacesMessage("Benutzer wurde erstellt."); 
    message.setSeverity(FacesMessage.SEVERITY_INFO); 
    throw new ValidatorException(message); 
} 

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: форму и многое другое, но ничего не получилось. У кого-то появилась идея?

+0

Кажется, что все будет в порядке. Попробуйте изолировать этот код на одной странице и выполнить его. –

+1

Вы уверены, что данные, которые вы использовали, действительны? Попробуйте удалить все обязательные атрибуты и атрибут validator и match для поля пароля. Или добавьте 'autoUpdate =" true "' в 'p: growl', чтобы увидеть ошибки проверки. – user1983983

+0

@ 7SpecialGems, поскольку JSF 2 метод, используемый в 'action', может * вернуть void *, чтобы сообщить структуре, что он не будет перемещаться за пределы представления. И это предпочтительный способ использования методов, вызванных ajax. –

ответ

0

Я решил это так

 <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> 
Смежные вопросы