如何在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
相关产品推荐
相关产品推荐

