2012-04-08 4 views
0

У меня есть основная форма, которая содержит внутреннюю форму (эта внутренняя форма появляется только в случае редактирования) и я хочу, чтобы обе формы были отделены друг от друга, чем при отправке основной формы внутреннее не представлено, как это сделать?Отправить основную форму без отправки внутренней формы

вот фрагмент:

<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> 

Текущее поведение: при подаче MainForm внутренняя форма представляется слишком, но при подаче внутренней формы основной не представлены.

Желаемое поведение: при подаче mainForm внутренняя часть не отправляется, а при отправке внутреннего объекта основной элемент также не отправляется.

ответ

3

Вложенные формы не то, что вы действительно хотите иметь в ваших страницах ...

Как насчет этого подхода? завернуть в двух панелях и использовать Ajax для выполнения/оказывать им

<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> 

Вы можете разместить столько <h:panelGroup, что вы хотите, и добавить свои идентификаторы в визуализации выполнения вашего F: Ajax, например f:ajax execute="FirstPanel ThirdOne AnotherOne" ...

+0

Следует обязательно избегать вложенных форм. Их поведение непредсказуемо и отличается от одного браузера к другому. –

+2

Чтобы быть более точным, это незаконно в соответствии со спецификацией HTML. – BalusC

+0

Есть ли какие-либо другие обходные пути, такие как игнорирование проверки в innerForm или скрытие innerForm или предотвращение его отправки при отправке mainForm? –

0

У меня возникла проблема с внутренней формой IE9, что содержимое формы не отображается, поэтому я удалил внутреннюю форму и использовал функцию partialSubmit для ледяных поверхностей, и это решило проблему.

+2

Вложенные формы являются незаконными в HTML. Вы никогда не должны иметь их на своих веб-страницах. Поведение браузера не указано. – BalusC

+0

@BalusC, да, вы правы, я просто делился своим опытом с ними. –

Смежные вопросы