2010-06-15 10 views
8

Das ist meine Phase ListenerAktion Methode wird nicht in JSF genannt

public class AdminPhaseListener implements PhaseListener { 

private static final long serialVersionUID = -1161541721597667238L; 

public void afterPhase(PhaseEvent e) { 
    System.out.println("after Phase " + e.getPhaseId()); 
} 

public void beforePhase(PhaseEvent e) { 
    System.out.println("before Phase " + e.getPhaseId()); 
    if(e.getPhaseId()== PhaseId.RESTORE_VIEW) 
    { 

    } 

} 

public PhaseId getPhaseId() { 
    return PhaseId.ANY_PHASE; 
}} 

Auf Klick auf eine Befehlsschaltfläche in meiner Seite, nenne ich eine Aktion Methode und einige Verarbeitung tun, aber die Aktion-Methode wird nicht aufgerufen , aber im Serverprotokoll konnte ich die Nachrichten sehen, die von meinem PhaseListener für alle Phasen gedruckt wurden.

Wenn meine Sicht nicht geändert wurde, hätte es nach der RESTORE_VIEW Phase richtig aufgehört?

irgendwelche Gedanken?

Sie den Code für Wie ich den Befehlsschaltflächen anzuzeigen:

<table width="100%"> 
      <h:column rendered="#{adminBean.displayResultsSize > 0}"> 

       <tr> 
        <td colspan="14" height="5" nowrap="nowrap" class="WhiteRow"></td> 
       </tr> 
       <tr> 
        <td colspan="14" height="1" nowrap="nowrap" align="center" 
         bgcolor="#999999"></td> 

       </tr> 
       <h:inputHidden id="removeUserId" value="#{adminBean.removeUserId}"/> 
       <h:inputHidden id="removeIBD" value="#{adminBean.removeIBD}"/> 
       <h:inputHidden id="removeAPA" value="#{adminBean.removeAPA}"/> 
       <tr> 
        <td colspan="14" height="30" nowrap="nowrap" 
         class="FilterColumnGrayHeader" align="center">&nbsp;&nbsp;&nbsp; 
        <input type="button" disabled="disabled" id="button_edit" 
         value="Edit Details" class="disabledfield" 
         onclick="populateEditRow();"> 
        </input> <h:commandButton type="submit" class="disabledfield" immediate="true" 
         id="button_remove" value="Remove" onclick="populateRemoveRow();" action="#{adminBean.remove}"> 
        </h:commandButton> &#160; 

        </td> 
       </tr> 
       <tr bgcolor="#000000"> 
        <td colspan="14" height="1" nowrap="nowrap" align="center" 
         bgcolor="#999999"></td> 
       </tr> 
       <tr> 
        <td height="10"></td> 
       </tr> 
      </h:column> 
     </table> 

Antwort

30

Ich bin unter Berufung auf von this answer:

Immer wenn ein UICommand Komponente die zugehörige Aktion aufzurufen fehlschlägt, überprüfen Sie Folgendes:

  1. UICommand Komponenten innerhalb einer UIForm Komponente platziert werden müssen (zB h:form).
  2. Sie können nicht nest mehrere UIForm Komponenten ineinander (Vorsicht mit Include-Dateien!).
  3. Es sollte kein Validierungs-/Konvertierungsfehler aufgetreten sein (verwenden Sie h:messages, um alle zu erhalten).
  4. Wenn UICommand Komponenten innerhalb einer UIData Komponente angeordnet sind, sicherzustellen, dass genau das gleiche DataModel (das Objekt hinter dem UIData ‚s value Attribute) erhalten bleibt.
  5. Die Attribute rendered und disabled der Komponente und aller übergeordneten Komponenten sollten nicht false während der Phase der Apply-Anforderungswerte ausgewertet werden.
  6. Stellen Sie sicher, dass PhaseListener oder EventListener in der Request-Response-Kette den JSF-Lebenszyklus so geändert hat, dass die Aktionsphase zum Aufrufen übersprungen wird.
  7. Sicher sein, dass keine Filter oder Servlet in der gleichen Anfrage-Antwort-Kette hat die Anfrage für die FacesServlet irgendwie blockiert.

Eine weitere Ursache kann sein, dass Sie den Code nicht ausgeführt wird Sie denken, Sie laufen.

+1

@gekrish Das Gleiche gilt für mich in den meisten Fällen. Dies kann schnell passieren, wenn ein View-Parameter in einer Request-Scoped-Variablen wie folgt gespeichert wird: '' Ein optionaler Flash-Scope für 'f: param' wäre großartig. Sonst speichere ich es immer in einer View-Scoped Bean. – djmj

3

Dies bedeutet im Allgemeinen, dass es Validierungsfehler auf der Seite sind. Versuchen Sie die Einstellung immediate="true", um die Fehler zu beheben, oder verwenden Sie <h:messages>, um die aufgetretenen Fehler anzuzeigen.

+0

Bitte erklären Sie, wie 'sofort =" wahr "' Fehler, die ohne es auftreten, überwindet. Was passiert mit den Gründen für die Fehler? –

0

Überprüfen Sie, ob ein Fehler bei einem Setter Ihrer Komponenten auftritt.

Verwandte Themen