1

无论如何要在 xhtml 页面中打印 facelets 参数的值,例如“facelets.DEVELOPMENT”(在 web.xml 中配置)?

PS.:我想打印这些值,即使它们不在 web.xml 中。在这些情况下,它将打印设置的默认值。

谢谢。

4

1 回答 1

0

不能直接在 EL 中引用所有特定于 Facelets 的参数,即使不是默认值,但您可以在 EL 中引用所有上下文参数。它们可通过基本上引用的隐式 EL 对象 获得。#{initParam}ExternalContext#getInitParameterMap()

因此,如果您事先知道参数名称,则应该这样做:

<p>
    Value of facelets.DEVELOPMENT context param: 
    #{initParam['facelets.DEVELOPMENT']}
</p>

或者,如果您只想显示所有上下文参数:

<dl>
    <c:forEach items="#{initParam}" var="p">
        <dt>#{p.key}</dt>
        <dd>#{p.value}</dd>
    </c:forEach>
</dl>

请注意,<c:forEach>使用它是因为<ui:repeat>不支持地图。但是,如果您确实需要视图渲染时间组件而不是视图构建时间标记,那么您也可以使用<ui:repeat>,前提是您的环境支持 EL 2.2:

<dl>
    <ui:repeat value="#{initParam.entrySet().toArray()}" var="p">
        <dt>#{p.key}</dt>
        <dd>#{p.value}</dd>
    </ui:repeat>
</dl>

无论哪种方式,为了专门过滤 Facelets 参数,请检查是否#{p.key}不以"facelets."using#{fn:startsWith()}等开头。

<ui:fragment rendered="#{fn:startsWith(p.key, 'facelets.')}">
    <dt>#{p.key}</dt>
    <dd>#{p.value}</dd>
</ui:fragment>

根据评论进行更新,您似乎对 JSF 项目阶段更感兴趣(javax.faces.PROJECT_STAGE顺便说一下,在 JSF2 中通常由上下文参数设置,facelets.DEVELOPMENT特定于旧的 Facelets 1.x)。这仅可通过Application#getProjectStage()以下方式获得:

#{facesContext.application.projectStage}

要专门检查 JSF 是否处于开发阶段,只需执行

<ui:fragment rendered="#{facesContext.application.projectStage == 'Development'}">
    <div class="warning">JSF is running in development stage!</div>
</ui:fragment>

同样,有关所有隐式 EL 对象的概述,请查看第 1 段中的链接。

于 2013-01-17T19:47:31.173 回答