有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何在JSF中访问Map

我尝试使用C:foreach在jsf中访问map。但在jsf中,我无法使用“#”符号访问它。但我可以使用“$”符号访问它。但我需要使用jsf组件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>

我做错了什么,我如何才能访问它?我的参考链接是 Dynamic value binding of JSF component 请帮帮我


共 (1) 个答案

  1. # 1 楼答案

    这仅在使用JSP2.1或更新版本(Servlet2.5或更新版本)时才起作用。在JSP 2.0或更早版本(Servlet 2.4或更早版本)上,无法通过延迟EL#{}引用c:forEach变量。延迟EL#{}最初是JSF1.0的一部分,直到后来JSF1.2发布时才集成到JSP2.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

    如果您正在运行与Servlet2.5兼容的容器(如Tomcat6.0及更高版本),那么您需要确保您的web.xml是按照Servlet2.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#{}

    另请参见: