如何在JSF中访问Map

时间:2010-12-29 02:49:39

标签: java jsp jsf jstl el

我尝试使用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 请帮帮我。

1 个答案:

答案 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 #{}

另见: