是否还要在xhtml页面中打印facelets参数的值,例如“facelets.DEVELOPMENT”(在web.xml中配置)?
PS:我想打印这些值,即使它们不在web.xml中。在这些情况下,它将打印设置的默认值。
感谢。
答案 0 :(得分:0)
你不能直接引用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>
不支持地图。但是,如果您确实需要视图渲染时间组件而不是视图构建时标记,那么您也可以使用<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项目阶段(通常由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段中的链接。