Как отключить все компоненты одного типа на странице JSF

Я сказал, что 4 страницы, которые динамически включаются, например:

      <c:forEach items="#{tareaController.mfuncionesAsociadas}" var="mFuncion" varStatus="loop1">                    
             <p:tab id="t_funcion_#{loop1.index}" title="#{mFuncion.nombre}"  >
                   <f:subview id="tab_#{loop1.index}">
                        <p:panelGrid id="pg_funcion_#{loop1.index}">
                           <ui:include src="#{mFuncion.paginaFuncion}"></ui:include>
                        </p:panelGrid>
                   </f:subview>
             </p:tab>
      </c:forEach>

Я хочу сделать следующее: на каждой странице, которую я генерирую, можно было только читать логическое значение в базе данных. Очевидно, я могу сделать это, просто отключив = переменная в каждом компоненте ввода на каждой отдельной странице. Но я хочу знать, есть ли самый элегантный способ сделать это, скажем, для всего inputText или всего inputTextarea на одной странице, или есть ли способ получить все входные элементы страницы в массив, где я могу изменить его свойства .


person Yayotrón    schedule 27.05.2015    source источник


Ответы (1)


Вы можете использовать OmniFaces <o:massAttribute> для этого.

<o:massAttribute target="javax.faces.component.UIInput" name="disabled" value="#{bean.disabled}">
    <ui:include ... />
</o:massAttribute>

Альтернативой является SystemEventListener, как указано в этом вопросе: Как отключить элементы внутри ViewHandler после того, как jsf внедрил составной компонент? Но это применимо ко всему веб-приложению, и вам нужно будет выполнить условную проверку.

person BalusC    schedule 27.05.2015
comment
Вау, массаттрибут OmniFaces — это именно то, что мне нужно, но я попробовал это, и OmniFaces запросил у меня CDI, но я использую Apache Tomcat 7.0.41.0, и, к сожалению, я не могу обновить его или изменить его настройки по умолчанию только для одного тега. :( Есть ли способ использовать SystemEventListener и вытащить это событие, а затем выполнить проверку всякий раз, когда страница включена? - person Yayotrón; 27.05.2015
comment
2.x действительно требует CDI. Используйте версию 1.x (последняя доступная версия — 1.10). - person BalusC; 27.05.2015
comment
Моя ошибка, я попытался загрузить версию 1.1, и этот тег выдал мне ошибку. Я попробую, извините! - person Yayotrón; 27.05.2015
comment
Он был добавлен в 1.8. Редактировать: ах, ладно, тогда неважно :) Продолжайте с 1.10. - person BalusC; 27.05.2015
comment
Вы, сэр, гений. В следующий раз я просто постучу в твою дверь, каждый раз, когда у меня будет вопрос, ты отвечаешь на него. - person Yayotrón; 27.05.2015
comment
Пожалуйста. Исследуйте и наслаждайтесь OmniFaces, он предлагает множество других полезных функций и утилит. - person BalusC; 27.05.2015
comment
Хорошая реклама, сэр. - person Yayotrón; 27.05.2015