【问题标题】:PrimeFaces 5.2: How to render Element that dependent on different contexts?PrimeFaces 5.2:如何渲染依赖于不同上下文的元素?
【发布时间】:2016-11-26 04:57:01
【问题描述】:

假设:用于在不同上下文中重复使用的代码片段。我有一个fragment.xhtml 将包含在多个其他不同的xhtml 中,比如main1.xhtml 和main2.xhtml

fragment.xhtml 为:

<h:body>
  <p:panelGrid id="qualifyGrid">
    <f:facet name="header">
        <p:row>
            <p:column colspan="4">#{staffBean.currentStaff.name} Qualify</p:column>
        </p:row>
    </f:facet>
   ......
    <p:row>
        <p:column styleClass="addlabel"><h:outputLabel for="id" value="#{clientqualify['web.qualify.label.id']}"/></p:column>
        <p:column styleClass="wideField" colspan="3">
            <h:inputText id="id1" value="#{qualifyvalue1}" rendered=""/>
            <h:inputText id="id" value="#{qualifyvalue}" rendered=""/>
        </p:column>
    </p:row>
   ......
    <p:row>
        <p:column styleClass="addlabel"><h:outputLabel for="name" value="#{clientqualify['web.qualify.label.name']}"/></p:column>
        <p:column styleClass="wideField" colspan="3"><p:inputText styleClass="field" id="name" value="#{qualifyControlBean.currentQualify.qualifyName}" required="true"/></p:column>
    </p:row> 
  </p:panelGrid>
</h:body>

main1.xhtml:

<h:body>
  <ui:composition template="/WEB-INF/ozssc-staff-template.xhtml">
    <ui:define name="content">
        <h3>#{clientqualify['web.qualify.edit.heading']}</h3>
        <p:messages id="messages" showDetail="true" autoUpdate="true" />
        <h:form id="qualifyeditform" prependId="false">
            <ui:include src="fragment.xhtml"/>
            <h:panelGrid style="display:block" border="0">
                <p:commandButton id="submit" value="Save" action="#{qualifyControlBean.saveQualify}" icon="fa fa-fw fa-save" ajax="false" disabled="#{qualifyControlBean.currentQualify.status=='Verified'}"/>
            </h:panelGrid>
        </h:form>
    </ui:define>
  </ui:composition>
</h:body>

main2.xhtml

<h:body>
  <ui:composition template="/WEB-INF/ozssc-staff-template.xhtml">
    <ui:define name="content">
        <h3>#{clientqualify['web.qualify.edit.heading']}</h3>
        <p:messages id="messages" showDetail="true" autoUpdate="true" />
        <h:form id="qeditform" prependId="false">
            <ui:include src="fragment.xhtml"/>
            <h:panelGrid style="display:block" border="0">
                <p:commandButton id="submit" value="Save" action="#{qualifyControlBean.saveQualify}" icon="fa fa-fw fa-save" ajax="false" disabled="#{qualifyControlBean.currentQualify.status=='Verified'}"/>
            </h:panelGrid>
        </h:form>
    </ui:define>
  </ui:composition>
</h:body>

从上面的 sn-ps 中你看到,fragment.xhtml 被包含在两个不同的表单中,在 main1.xhtml 中,表单 id 是“qualifyeditform”,而在 main2.xhtml 中,表单 id 是“qeditform”。

我很难找到一种方法让 fragment.xhtml 元素通过不同的父上下文呈现不同的输入文本。即,如果此 fragment.xhtml 包含在 main1.xhtml 中(表单 id 为:“qualifyeditform”),则呈现 inputText id“id1”。如果这个 fragment.xhtml 被包含在 main2.xhtml 中(表单 id 为:“qeditform”)渲染 inputText id“id”。

如何设置 EL 表达式来查找父表单元素的 id?并在我的 render="" 表达式中使用它?

【问题讨论】:

    标签: dom primefaces jsf-2 parent rendered-attribute


    【解决方案1】:

    我觉得你可以的

    <h:inputText id="id1" 
                 value="#{qualifyvalue1}" 
                 rendered="#{component.parent.clientId eq 'qualifyeditform'}"/>
    

    【讨论】:

    • 最终。通过使用 render="#{component.parent.parent.parent.parent.parent.clientId eq 'qualifyeditform'}"
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-06
    • 2012-07-04
    • 1970-01-01
    相关资源
    最近更新 更多