一尘不染

如何在JSF中访问Map

jsp

我已经尝试使用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组件的动态值绑定,请帮助我。


阅读 243

收藏
2020-06-10

共1个答案

一尘不染

这仅在使用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 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及更高版本),则需要确保已web.xml根据Servlet
2.5声明了您的容器。即根声明必须如下:

<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 。

也可以看看:

2020-06-10