2012-04-08 10 views
0

Ich habe ein Hauptformular, das ein inneres Formular enthält (das innere Formular erscheint nur im Bearbeitungsfall) und ich möchte beide Formulare voneinander getrennt werden, als beim Senden des Hauptformulars das Innere wird nicht vorgelegt, wie geht das?Submit Hauptformular ohne Vorlage eines inneren Formulars

hier ist ein Ausschnitt:

<h:form id="mainForm"> 

    <!-- some inputs here --> 

    <h:commandButton value="submit main" action="#{myBean.mainSubmit()}" /> 

<h:panelGroup rendered="#{myBean.editMode}"> 
    <h:form id="innerForm"> 
     <!-- some inputs here --> 

     <h:commandButton value="submit inner" action="#{myBean.innerSubmit()}" /> 
    </h:form> 
</h:panelGroup> 

</h:form> 

Aktuelles Verhalten: bei der Einreichung Mainform der innere Form auch gesendet wird, aber wenn die innere Form der Einreichung der Haupt nicht vorgelegt.

Gewünschtes Verhalten: Beim Einreichen der mainForm wird das innere nicht übergeben, und beim Einreichen des inneren wird das Haupt auch nicht übermittelt.

Antwort

3

Nested Formulare sind nicht etwas, das Sie wirklich in Ihren Seiten haben wollen ...

Wie wäre dieser Ansatz? wickeln in zwei Platten und verwenden Ajax auszuführen/machen sie

<h:form id="mainForm"> 
<h:panelGroup id="FirstPanel" rendered="#{myBean.editMode}"> 
    <!-- some inputs here --> 
    <h:commandButton value="submit main" action="#{myBean.mainSubmit()}" > 
     <f:ajax execute="FirstPanel" render="FirstPanel"></f:ajax> 
    </h:commandButton> 
</h:panelGroup> 

<h:panelGroup id="SecondPanel" rendered="#{myBean.editMode}"> 
    <!-- some inputs here --> 
    <h:commandButton value="submit inner" action="#{myBean.innerSubmit()}" > 
     <f:ajax execute="SecondPanel" render="SecondPanel"></f:ajax> 
    </h:commandButton> 
</h:panelGroup> 
</h:form> 

Sie können so viele <h:panelGroup Ort, den Sie möchten, und fügen Sie ihre IDs in den Render ausführen Ihrer f: ajax zum Beispiel f:ajax execute="FirstPanel ThirdOne AnotherOne" ...

+0

Verschachtelte Formulare sollten unbedingt vermieden werden. Ihr Verhalten ist unvorhersehbar und unterscheidet sich von einem Browser zum anderen. –

+2

Um genauer zu sein, ist es illegal wie HTML-Spezifikation. – BalusC

+0

Gibt es noch andere Problemumgehungen wie das Ignorieren der Validierung in InnerForm oder das Ausblenden der InnerForm oder das Verhindern des Sendens beim Übermitteln der MainForm? –

0

Ich sah ein Problem mit der inneren Form auf IE9, dass der Inhalt des Formulars nicht anzeigbar ist, so entfernte ich die innere Form und verwendet die partialSubmit-Funktion von Icefaces, und das hat das Problem gelöst.

+2

Verschachtelte Formulare sind in HTML illegal. Sie sollten sie nie auf Ihren Webseiten haben. Das Browserverhalten ist nicht spezifiziert. – BalusC

+0

@BalusC, ja du hast Recht, ich habe nur meine Erfahrungen mit ihnen geteilt. –

Verwandte Themen