You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在JSF Facelets中动态访问ui:param参数值?

动态访问JSF Facelets中<ui:param>参数的方法

方法一:通过EL隐式作用域对象直接取值

<ui:param>定义的参数默认会存入请求作用域(requestScope)或视图根的视图映射(viewRoot.viewMap),你可以在<c:forEach>里用EL的动态属性语法,拼接参数名后从作用域中获取对应值:

修改后的代码示例:

<ui:composition xmlns="http://www.w3.org/1999/xhtml" xmlns:h="jakarta.faces.html" xmlns:f="jakarta.faces.core" xmlns:ui="jakarta.faces.facelets" xmlns:c="jakarta.tags.core">

    <ui:param name="param1" value="value 1" />
    <ui:param name="param2" value="value 2" />
    <ui:param name="param3" value="value 3" />

    param1: #{param1}
    <p></p>
    param2: #{param2}
    <p></p>
    param3: #{param3}

    <c:forEach begin="1" end="3" var="idx">
        <p></p>
        <h:outputText value="param#{idx}: #{requestScope['param' + idx]}" />
    </c:forEach>
</ui:composition>

如果requestScope取不到值,可替换为#{facesContext.viewRoot.viewMap['param' + idx]},部分Facelets版本会将<ui:param>存入视图映射而非请求作用域。

方法二:封装参数到Map(更易维护的方式)

如果参数数量较多或后续可能变动,建议先把参数封装成Map,循环时无需拼接参数名,逻辑更清晰:

<ui:composition xmlns="http://www.w3.org/1999/xhtml" xmlns:h="jakarta.faces.html" xmlns:f="jakarta.faces.core" xmlns:ui="jakarta.faces.facelets" xmlns:c="jakarta.tags.core">

    <!-- 定义包含所有参数的Map -->
    <ui:param name="paramsMap" value="#{ {'param1':'value 1', 'param2':'value 2', 'param3':'value 3'} }" />

    <!-- 遍历Map的键值对 -->
    <c:forEach items="#{paramsMap.entrySet()}" var="entry">
        <p></p>
        <h:outputText value="#{entry.key}: #{entry.value}" />
    </c:forEach>
</ui:composition>

内容的提问来源于stack exchange,提问作者Andrew Churchill

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 19:17:41