是否有办法在 xhtml 页面中打印 Facelets 参数的值,例如“facelets.DEVELOPMENT”(在 web.xml 中配置)?
PS:我想打印这些值,即使它们不在 web.xml 中。在这些情况下,它将打印设置的默认值。
谢谢。
最佳答案
您无法直接引用 EL 中的所有特定于 Facelets 的参数,即使不是默认值,但您可以引用 EL 中的所有上下文参数。它们可以通过 implicit EL object #{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>
不支持映射。但是,如果您确实需要 View 渲染时间组件而不是 View 构建时间标记,那么您也可以使用 <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."
是否不以 #{fn:startsWith()}
开头,依此类推。
<ui:fragment rendered="#{fn:startsWith(p.key, 'facelets.')}">
<dt>#{p.key}</dt>
<dd>#{p.value}</dd>
</ui:fragment>
<小时/>
更新根据评论,您似乎对 JSF 项目阶段更感兴趣(在 JSF2 中,通常由 javax.faces.PROJECT_STAGE
上下文参数设置,顺便说一句,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 段中的链接。
关于java - 在 xhtml 页面中打印 Facelets 参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14386738/