表达式语言在tomcat7中不起作用。#{message.name_prompt}
被#{message.name_prompt}
括起来。
我尝试用 el-api-2.2.jar 替换tomcat lib文件夹中的 el-api.jar ,然后输入 el-impl- 2.2.jar 在WEB-INF / lib文件夹中添加
<context-param>
<param-name>org.apache.myfaces.EXPRESSION_FACTORY</param-name>
<param-value>com.sun.el.ExpressionFactoryImpl</param-value>
</context-param>
到 web.xml 。还是一样。
我的tomcat确切版本是* 7.0.21 *这是带有默认tomcat设置的web.xml:
<?xml version="1.0" encoding="UTF-8"?>
<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_3_0.xsd"
id="WebApp_ID" version="3.0">
<display-name>BasicExamples</display-name>
<context-param>
<param-name>javax.faces.STATE_SAVING_METHOD</param-name>
<param-value>server</param-value>
</context-param>
<listener>
<listener-class>org.apache.myfaces.webapp.StartupServletContextListener</listener-class>
</listener>
<!-- Faces Servlet -->
<servlet>
<servlet-name>Faces Servlet</servlet-name>
<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<!-- Faces Servlet Mapping -->
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>*.jsf</url-pattern>
</servlet-mapping>
<login-config>
<auth-method>BASIC</auth-method>
</login-config>
</web-app>
更新
现在我发现表达式语言不在表单页面上工作,但是消息表达式语言正在#{message.result_text}
=&gt; You entered the following information
:但仍然是托管bean无效。
并且 El 与jsf2.0
答案 0 :(得分:1)
您无需安装/添加任何内容即可让EL 2.2在Tomcat 7中运行。已经附带EL 2.2。删除那些JAR和上下文参数。
鉴于你的症状
#{message.name_prompt}
被视为#{message.name_prompt}
我的印象是你在谈论在模板文本中使用EL,如:
<p>This is EL in template text #{message.name_prompt}</p>
这是不 EL 2.2功能。这是Facelets功能。 Facelets是JSP的继承者。您需要使用Facelets替换JSP,以便能够在模板文本中使用EL。对于JSF 1.2,您可以使用Facelets 1.1。
否则,当你想坚持使用JSP时,你真的需要使用<h:outputText>
:
<p>This is EL in template text <h:outputText value="#{message.name_prompt}" /></p>
唯一新的EL 2.2功能是能够使用参数调用操作方法,例如:
<h:dataTable value="#{bean.list}" var="item">
<h:column>
<h:commandButton value="Edit" action="#{bean.edit(item)}" />
</h:column>
</h:dataTable>