我已经尝试使用C:foreach在jsf中访问地图。但是我无法使用“#”符号来访问jsf中的地图。但是我可以使用“ $”符号来访问它。但是我需要使用jsf来访问display组件h:outputtext。我的示例代码是
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>
我做错了什么以及如何访问?我的引用链接是JSF组件的动态值绑定,请帮助我。
这仅在使用JSP 2.1或更高版本(Servlet 2.5或更高版本)时才有效。在JSP 2.0或更高版本(Servlet 2.4或更高版本)上,无法c:forEach通过延迟EL 引用变量#{}。推迟的EL #{}最初是JSF 1.0的一部分,直到后来发布JSF1.2时才集成到JSP 2.1中。但是,您应该能够使用标准EL ${}。
c:forEach
#{}
${}
<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。
UIInput
<h:inputText>
如果您正在运行与Servlet 2.5兼容的容器(例如Tomcat 6.0及更高版本),则需要确保已web.xml根据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 。