JSF 2 Mojarra — Обязательный атрибут не выполняется после рендеринга f: ajax

#ajax #jsf #jsf-2 #render #required

#ajax #jsf #jsf-2 #рендеринг #требуется

Вопрос:

Рассмотрим этот простой пример. Если у меня есть форма, подобная этой, я, очевидно, получаю ошибку проверки при отправке без значения во входном тексте:

 <h:form id="testForm" prependId="false">

    <h:selectOneMenu 
        id="testSelectOneMenu" 
        value="#{backButtonTestBean.selection}">
        <f:selectItem itemValue="mickey" itemLabel="Mickey" />    
        <f:selectItem itemValue="mouse" itemLabel="Mouse" />
        <f:ajax execute="@this" render="panel" />
    </h:selectOneMenu>                 

       <h:panelGroup layout="block" id="panel">
           <h:panelGroup layout="block">
               <h:inputText id="requiredField" required="true" />
           </h:panelGroup>    
       </h:panelGroup>

       <h:commandButton value="submit" action="#{backButtonTestBean.submit}" />

</h:form>
  

Но когда я повторно визуализирую panelGroup w / f: ajax, требуемый атрибут не выполняется, и я могу отправить с пустым значением:

 <h:form id="testForm" prependId="false">

    <h:selectOneMenu 
        id="testSelectOneMenu" 
        value="#{backButtonTestBean.selection}">
        <f:selectItem itemValue="mickey" itemLabel="Mickey" />    
        <f:selectItem itemValue="mouse" itemLabel="Mouse" />
        <f:ajax execute="@this" render="panel" />
    </h:selectOneMenu>                 

       <h:panelGroup layout="block" id="panel">
           <h:panelGroup layout="block" rendered="#{backButtonTestBean.selection == 'mouse'}">
               <h:inputText id="requiredField" required="true" />
           </h:panelGroup>    
       </h:panelGroup>

       <h:commandButton value="submit" action="#{backButtonTestBean.submit}" />

</h:form>
  

Я тестирую в mojarra 2.1.1. Приветствуются любые советы.

Комментарии:

1. С «w /» вы хотели сказать «с»? Мне было трудно понять этот вопрос.

2. ДА. Это плохая привычка из чата, а не для этого сайта. Я перестану его использовать и соответствующим образом отредактирую этот пост.

3. В случае, если вы не знали, если вы нашли решение самостоятельно, то вы имеете право опубликовать его в качестве собственного ответа.

4. я этого не осознавал. Считается ли это хорошим тоном?

Ответ №1:

обновление: Я понял это. BackButtonTestBean находился в области запроса, поэтому значение testSelectOneMenu не было «mouse», когда я отправлял форму. Следовательно, он не был рендерен, и, следовательно, средства проверки были недействительными. Изменен на @ViewScoped и работает, как ожидалось.