如何禁用 JSF 页面中同一类型的所有组件

How to disable all components for the same type in a JSF page

我已经说过 4 个页面被这样的 for 动态包含:

      <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,或者是否有办法将页面的所有输入元素放入一个数组中,我可以在其中修改其属性.

您可以为此使用 OmniFaces <o:massAttribute>

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

另一种方法是 SystemEventListener,如这个问题所回答:How to disable elements from within a ViewHandler after jsf has embedded the composite component? 但这将适用于整个 Web 应用程序,您需要执行条件检查。