форма внутри формы: пропустить проверку родительской формы - PullRequest
3 голосов
/ 14 апреля 2011
<h:form prependId="false" id="parentForm">
    ...
    <h:form prependId="false" id="commentForm">
        ...
        add comment
    </h:form>
    save
</h:form>

Не работает ...

Без внутренней формы родительские элементы проверяются, когда я просто хочу добавить комментарий.
«Добавить комментарий» должен просто подтвердить комментарий, а при нажатии «Сохранить» родитель должен быть подтвержден.

1 Ответ

12 голосов
/ 14 апреля 2011

Вложение форм недопустимо как в HTML, так и в JSF, поскольку все, что он делает, - это просто генерирует HTML. Вы должны поместить их рядом друг с другом.

Если у вас есть несколько кнопок в одной форме, из которых вы хотите пропустить определенную проверку при нажатии определенной кнопки, то добавьте immediate="true" к соответствующей кнопке. Таким образом, все поля ввода, которые не имеют immediate="true", будут пропущены.

Смотри также:


Обновление : ОК, вам нужны две физически отдельные формы внутри одной формы. Если разделение «Божественной Формы» на несколько форм с каждой отдельной ответственностью не является вариантом, то есть несколько способов обойти это:

Если вы не используете Ajax и у вас просто есть required="true" на элементе ввода, который вы фактически хотите сделать ненужным при нажатии определенной кнопки, то выполните:

<h:form>
    ...
    <h:commandButton value="Submit form but but do not validate comment" />
    ...
    <h:inputTextarea id="comment" required="#{not empty param[foo.clientId]}" immediate="true" />
    <h:commandButton binding="#{foo}" value="Submit and validate comment" immediate="true" />
</h:form>

Если вы действительно используете Ajax, просто укажите регион выполнения в атрибуте execute.

<h:form>
    <h:panelGroup id="other">
        ....
        <h:commandButton value="Submit form but but do not validate comment">
            <f:ajax execute="other" render="other" />
        </h:commandButton>
    </h:panelGroup>
    <h:panelGroup id="comments">
        <h:inputTextarea required="#{not empty param[foo.clientId]}" />
        <h:commandButton value="Submit and validate comment by ajax">
            <f:ajax execute="comments" render="comments" />
        </h:commandButton>
    </h:panelGroup>
</h:form>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...