在xhtml页面中打印Facelets参数

时间:2013-01-17 19:37:10

标签: java jsf-2 facelets

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

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

感谢。

1 个答案:

答案 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段中的链接。