java - 在 xhtml 页面中打印 Facelets 参数

标签 java jsf-2 facelets

是否有办法在 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/

相关文章:

java - 将 javassist 字节码操作与 maven 编译集成

JSF 1.2 facelets 自定义组件

jsf - 在 cc 外部声明标记 :implementation and let the cc:implementation include it

java - 在java中如何使用属性将多个值从一个类传递到另一个类?

java - 用于检索多行的 JDBCTemplate queryForMap

jsf-2 - 使用 h :button 时去掉 URL 中的 ;jsessionid=xxx 路径参数

jsf - 如何用outputText显示换行符?

java - 从另一个 servlet 获取 Primefaces EventBus

XML 或文本声明不在实体的开头

java - 更多 Mockito RETURNS_DEEP_STUBS 问题