Как пропустить проверку определенных полей в JSF 2 при необходимости - PullRequest
2 голосов
/ 02 ноября 2011

У меня есть два p: диалог. Каждое из них содержит несколько полей ввода, которые помечены как обязательные. Одновременно отображается только одно диалоговое окно, но когда я отправляю сообщение в любом из диалогов, JSF также проверяет поля ввода в диалоговом окне, которое не отображается. Каков наилучший подход для пропуска проверок в JSF 2 для диалогового окна, которое не показано. Одним из подходов может быть то, что я установил требуемый = "условие". Но не знаю, что это может быть за состояние и собирается ли оно работать.

Каждый диалог изначально скрыт. У каждого есть своя кнопка, чтобы показать. Когда один из них активен, и я нажимаю кнопку сохранения, возникает ошибка проверки, даже если в обязательном поле есть значения. Ошибка проверки происходит из неактивной диалоговой панели. Может быть, это даст некоторое представление о том, что я пытаюсь сделать.

ОБНОВЛЕНИЕ

<p:dialog header="Edit Group" widgetVar="dialog_groupEdit" resizable="false"  
          width="300" showEffect="bounce" hideEffect="explode" modal="true" position="center">
    <h:panelGrid id="panel_groupEdit" columns="2">
        <h:outputText value="Group Name: "/>
        <h:inputText id="input_gnameEdit" size="26" value="#{groupBean.selectionGroup.gname}" required="true" requiredMessage="Edit Group: Name is required."/>
        <h:outputText value="Description:"/>
        <h:inputTextarea rows="6" cols="23" value="#{groupBean.selectionGroup.description}"/>
        <div></div>
        <p:commandButton value="Save" action="#{groupBean.saveGroupChanges}" oncomplete="#{args.validationFailed ? '':'dialog_groupEdit.hide()'}"
                                    update="panel_groups panel_groupEdit" style="float:right;"/>
        <div></div>
        <p:message for="input_gnameEdit"/>
    </h:panelGrid>
    </p:dialog>

    <p:dialog header="New Group" widgetVar="dialog_groupCreate" resizable="false"  
          width="300" showEffect="bounce" hideEffect="explode" modal="true" position="center">
    <h:panelGrid id="panel_groupCreate" columns="2">
        <h:outputText value="Group Name: "/>
        <h:inputText id="input_gnameCreate" size="26" value="#{groupBean.createGroup.gname}" required="true" requiredMessage="New Group: Name is reqired."/>
        <h:outputText value="Description:"/>
        <h:inputTextarea rows="6" cols="23" value="#{groupBean.createGroup.description}"/>
        <div></div>
        <p:commandButton value="Save" actionListener="#{groupBean.saveGroupCreate}" oncomplete="#{empty groupBean.createGroup.gname ? ' ':'dialog_groupCreate.hide()'}"
                                    update="panel_groupCreate panel_groups" style="float:right;"/>
        <div></div>
        <p:message for="input_gnameCreate"/>
    </h:panelGrid>
    </p:dialog>

Ответы [ 2 ]

5 голосов
/ 03 ноября 2011

Один из подходов может заключаться в том, что я устанавливаю требуемое = "условие".

Это будет неуклюже.Просто поместите каждую отдельную форму в отдельный компонент <h:form> или используйте атрибут process <p:commandButton>, чтобы определить область, которую вы хотите обработать.

<p:commandButton process="panel_groupEdit" ... />

...

<p:commandButton process="panel_groupCreate" ... />

Наличие «Бога»«Форма в любом случае плохая практика.

См. также:

1 голос
/ 04 ноября 2011

Когда вы используете <p:dialog, некоторые рекомендации, рекомендованные на форуме PF, -

  1. Никогда не помещайте ваш <p:dialog внутри какого-либо другого компонента.Поместите его куда-нибудь так, чтобы он попадал прямо под <h:body.
  2. . Дайте каждому <p:dialog свою собственную форму.Но не размещайте диалог внутри формы, поместите форму внутри диалога.Не стоит обновлять само диалоговое окно, только его содержимое.(Я думаю, это должно решить и вашу проблему.)

например,

<p:dialog widgetVar="dlg" ...
    <h:form ...
        <h:panelGroup id="dlgContent" ... 
...