【问题标题】:EL expressions are not evaluated不计算 EL 表达式
【发布时间】:2011-09-05 11:40:56
【问题描述】:

我开发了一个带有 java server faces 标签的 java server page。它正在获取这样的 bean 数据:

<h:inputText value="#{UserBean.userName}" />

但是当我运行它时,它会按原样显示价值,而不是评估价值。

这是怎么引起的,我该如何解决?

【问题讨论】:

  • 当我在文本框中运行时,它显示 #{UserBean.userName}

标签: java jsp jsf el


【解决方案1】:

除了 servlet 版本(从 2.5 开始),不要忘记查看 web.xml 中是否有 el-ignored 为 true。

<jsp-config> 
   <jsp-property-group> 
   <url-pattern>*.jsp</url-pattern> 
   <el-ignored>true</el-ignored> 
   </jsp-property-group 
</jsp-config>

或页面中的 JSP 指令,如下所示:

<%@ page isELIgnored="true" %>

【讨论】:

    【解决方案2】:

    我猜您在 web.xml 中缺少 JSF servlet。

    这是 JSF 2.0 的示例配置:

    <web-app xmlns="http://java.sun.com/xml/ns/javaee"
        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"
        version="2.5">
    
        <description>JSF 2.0 - Hello World</description>
        <servlet>
            <servlet-name>Faces Servlet</servlet-name>
            <!-- This is important -->
            <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
            <load-on-startup>1</load-on-startup>
        </servlet>
    
        <servlet-mapping>
            <!-- This is important -->
            <servlet-name>Faces Servlet</servlet-name>
            <url-pattern>*.xhtml</url-pattern>
        </servlet-mapping>
    
        <welcome-file-list>
            <welcome-file>hello.xhtml</welcome-file>
        </welcome-file-list>
    
        <context-param>
            <param-name>javax.faces.PROJECT_STAGE</param-name>
            <param-value>Development</param-value>
        </context-param>
    </web-app>
    

    对于 JSF 1.2,您可能需要一些额外的 servlet,这里是 example for RichFaces。请验证您的 web.xml 是否至少包含 FacesServlet 以及 servlet 映射是否正确完成。如果您需要更多帮助,请粘贴 web.xml 和 faces-config.xml(如果存在)。

    【讨论】:

    • 这是不正确的。如果FacesServlet 丢失或未调用,则 OP 将不会在呈现的页面中看到任何原始 EL 表达式。仅仅是因为 &lt;h:inputText&gt; 不会被渲染为 &lt;input type="text"&gt; 并且 HTML 无法识别 &lt;h:inputText&gt;
    【解决方案3】:

    所以,EL 表达式没有被评估,您在网页中看到#{UserBean.userName} 而不是评估值?

    确保您的 web.xml 声明符合 web 容器支持的最大支持 Servlet 版本。 JSF 1.2 和 2.0 至少需要 Servlet 2.5。 JSF 2.1 至少需要 Servlet 3.0。 Servlet 版本与所使用的 EL 版本相耦合。 JSF 1.2/2.0 依赖于新的“统一 EL”(EL 2.1),它是 Servlet 2.5 的一部分。

    我假设 Servlet 2.5,下面是 web.xml 的根声明的样子:

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app 
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns="http://java.sun.com/xml/ns/javaee" 
        xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 
        xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
        version="2.5">
    
        <!-- Your config here -->
    
    </web-app>
    

    如果您已将项目正确配置为 Servlet 2.5 项目并选择了与 Servlet 2.5 兼容的容器(例如至少 Tomcat 6.0),那么一个不错的 IDE 可以为您自动生成它。

    【讨论】:

    • 那么,EL 表达式没有被评估,您在网页中看到#{UserBean.userName} 而不是评估值?正是
    • 我已经编辑了你的问题标题。似乎你不明白到底发生了什么。
    • 那么你的容器根本不支持servlet 2.5。或者你没有正确设置它。或者您没有重建/重新部署/重新启动项目/服务器。或者由于某种原因,您在 /WEB-INF/lib 中有特定于容器的库。等等..等等
    猜你喜欢
    • 2011-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-22
    • 1970-01-01
    相关资源
    最近更新 更多