无论如何要在 xhtml 页面中打印 facelets 参数的值,例如“facelets.DEVELOPMENT”(在 web.xml 中配置)?
PS.:我想打印这些值,即使它们不在 web.xml 中。在这些情况下,它将打印设置的默认值。
谢谢。
您不能直接在 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 段中的链接。