2009-05-25 23 views
2

Ich bin mit der Verwendung bedingt bewerteten Ausdruck in JSF/a4jBedingtes erforderlich JSF-Validierung in a4j Form

meinen Code Hier ist ein kleines Problem mit

<a4j:form> 
     <h:inputText id="id1" value="#{mybean.myvalue}" size="1" 
        required="#{not mybean.condition}" 
        rendered="#{not mybean.condition}" 
        requiredMessage="Put a number in here" /> 

      <h:selectBooleanCheckbox value="#{mybean.condition}"> 
       <a4j:support event="onclick" reRender="id1"/> 
      </h:selectBooleanCheckbox> 

<a4j:commandButton action="#{mybean.myaction}" value="Do something" /> 

</a4j:form> 

Die boolean Checkbox bedingt die Validierung aktivieren/deaktivieren.

Das funktioniert nicht: der a4j: commandButton überspringt einfach die Validierung.

Danke.

Antwort

6

Wenn die input ausfällt Validierung (Prozessvalidierungen Phase), dann wird der Wert mybean.condition nicht (Process Updates Phase) aktualisiert werden. Da das Textfeld das erforderliche-Attribut verwendet, ist dies sehr wahrscheinlich.

Lifecycle von der Richfaces doc:

alt text http://www.jboss.org/file-access/default/members/jbossrichfaces/freezone/docs/devguide/en/html_single/images/newpic1.png

Wenn eine JSF Phase ausfällt, springt der Lifecycle-Antwort auf Render auf ungültige Eingaben zu vermeiden, arbeitet. Sie können die h:message und h:messages Tags verwenden, um gemeldete Fehler anzuzeigen (wenn auch, weil Sie AJAX verwenden, werden Sie sie in etwas setzen müssen, die neu gerendert werden lassen.

Ich vermute, dass, wenn Sie die eingestellt ajaxSingle Attribut auf dem aj4:support Tag, würden Sie das gewünschte Verhalten erhalten.Die Dokumentation besagt, dass dies nur den Wert für das Steuerelement übergeben wird, so dass das Textfeld nicht in den Phasen Apply Values ​​/ Process Validations/Process Updates enthalten ist .

+0

Danke, aber wo sollte ich das Attribut ajaxSingle setzen? –

+0

Auf dem Aj4: Support-Tag. – McDowell

0

Was ist der Geltungsbereich von mybean? Wenn es Geltungsbereich der Anforderung ist, wird der Wert zurückgesetzt, wenn Sie auf die Schaltfläche klicken, und das Eingabefeld könnte überhaupt verarbeitet werden (wenn gerenderte Resol ves zu "falsch").