【问题标题】:How to disable all components for the same type in a JSF page如何禁用 JSF 页面中相同类型的所有组件
【发布时间】:2015-05-27 14:28:50
【问题描述】:

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

【问题讨论】:

    标签: jsf jsf-2 disabled-control


    【解决方案1】:

    您可以为此使用OmniFaces &lt;o:massAttribute&gt;

    <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 应用程序,您需要执行条件检查。

    【讨论】:

    • 哇,OmniFaces massAttribute 正是我所需要的,但我试过了,OmniFaces 要求我提供 CDI,但我使用的是 Apache Tomcat 7.0.41.0,遗憾的是,我无法升级它或仅针对一个标签修改其默认设置:(有没有办法使用 SystemEventListener 并拉动该事件,然后在包含页面时进行检查?
    • 2.x 确实需要 CDI。使用 1.x 版本(当前可用的最新版本是 1.10)。
    • 我的错误,我尝试下载 1.1 版本,但该标签引发错误。我要试试,对不起!
    • 它是在 1.8 中添加的。编辑:嗯,好吧,那没关系:) 继续 1.10。
    • 不客气。探索和享受 OmniFaces,它提供了许多其他方便的好东西/实用程序。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-04-10
    • 1970-01-01
    • 2011-05-01
    • 2022-08-14
    • 2014-08-10
    • 1970-01-01
    相关资源
    最近更新 更多