我尝试使用C:foreach来访问jsf中的地图。但我无法使用“#”符号访问jsf中的地图。但我可以使用“$”符号访问它。但是我需要访问使用jsf组件显示h:outputtext.My示例代码是
h:form binding="#{MapInJsf.initForm}">
<c:forEach items="#{MapInJsf.nameMap}" var="nameMap">
<%--<li>${nameMap.key}</li>--%> I cann access it
<%--<h:outputText value="#{nameMap}"/>--%>
<h:outputText value="Name2 : #{nameMap.key}"/>
<h:outputText value="Last Name1 : #{nameMap.value}"/>
</c:forEach>
</h:form>
我做错了什么以及如何访问?我的Ref链接是 Dynamic value binding of JSF component 请帮帮我。
答案 0 :(得分:2)
这仅适用于使用JSP 2.1或更高版本(Servlet 2.5或更高版本)的情况。在JSP 2.0或更早版本(Servlet 2.4或更早版本)上,无法通过延迟EL c:forEach
引用#{}
变量。延迟的EL #{}
最初是JSF 1.0的一部分,后来只是在JS 2.1发布时才集成在JSP 2.1中。但是,您应该能够使用标准EL ${}
。
<c:forEach items="${MapInJsf.nameMap}" var="nameMap">
<h:outputText value="Name2 : ${nameMap.key}"/>
<h:outputText value="Last Name1 : ${nameMap.value}"/>
</c:forEach>
但是你无法将它绑定到像UIInput
这样的<h:inputText>
组件,因为${}
表示法只调用bean getter而不是setter。
如果您正在运行servlet 2.5兼容容器(如Tomcat 6.0及更高版本),那么您需要确保根据Servlet 2.5声明web.xml
。即根声明必须如下:
<web-app
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
id="YourWebAppID"
version="2.5">
只有这样你才能在像JSTL这样的JSP标签上使用延迟的EL #{}
。