JFinal部署到Tomcat7后EL表达式没有解析出来

启程者 发布于 2015/06/23 21:46
阅读 1K+
收藏 1

以下是问题补充:

@启程者:直接在Eclipse中用Jetty插件或者Tomcat7插件可以显示正常,发布到Tomcat7 Webapp下就没法显示了 (2015/06/23 21:49)
加载中
1
首席打酱油
首席打酱油

在自己练手时遇到了EL表达式被当成字符串处理而没有正确解析的现象。当时工程中使用的Javaee5,

web.xml

------------------------------------------------------------------------------

<web-app version="2.5" 
    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" >

 

EL表达式死活不解析,被当成字符串处理了。

 

后来把web.xml改成

------------------------------------------------------------------------------

<web-app version="2.4" 
    xmlns="http://java.sun.com/xml/ns/j2ee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 
    http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

 

重新部署,启动tomcat,结果EL表达式被正确解析了出来。

 

后来进一步查资料得知:

 

 

这是Jsp2.0的一个新特性:

二)引入表达式语言(EL)

  JSP 2.0的一个主要特点是它支持表达语言(expression language)。JSTL表达式语言可以使用标记格式方便地访问JSP的隐含对象和JavaBeans组件,JSTL的核心标记提供了流程和循环控制 功能。自制标记也有自定义函数的功能,因此基本上所有seriptlet能实现的功能都可以由JSP替代。在JSP 2.0中,建议尽量使用EL而使JSP的格式更一致。

  在web.xml的<jsp-property-group>中可以控制一组 JSP是否使用EL,在每个JSP中也可以指定是否该JSP使用EL。在page directive中的isELIgnored属性用来指定是否忽略。格式为:

  <%@ page isELIgnored="true|false"%>

  如果设定为真,那么JSP中的表达式被当成字符串处理。比如下面这个表达式 <p>${2000 % 20}</p>在isELIgnored="true"时输出为${2000 % 20},而isELIgnored="false"时输出为100。Web容器默认isELIgnored="false"。

  虽然 JSP 2.0可以使JSP中完全使用表达语言而避免scriptlet,在实际编程中,应该根据程序的功能要求和编程人员的自身条件选择合适的方式。使用表达语 言的JSP比较方便规整,但是由于需要将标记进行转换,在第一次被调用时会比较慢;有些编程人员由于对Java比较了解,因而更习惯JSP 1.2之前的编程方式,因此,在使用中应因地制宜地选择适用的编程方法。

 

 

也就是说在javaee4中默认设置是<%@ page isELIgnored="false"%>,而javaee5中默认设置可能是<%@ page isELIgnored="true"%>,所以在javaee5我们可以通过在jsp页面设置<%@ page isELIgnored="false"%>来指定正常解析EL表达式 。

启程者
启程者
谢谢正解! 每个页面加上<%@ page isELIgnored="false"%>
0
JFinal
JFinal
在本地开发时间有无问题?
启程者
启程者
现在是在本地
0
JFinal
JFinal

部署在 tomcat 下参考一下这篇博文:http://my.oschina.net/jfinal/blog/353062 

注意一下 context path 是否正确

启程者
启程者
这个项目地址:https://git.oschina.net/KLRepositories/JFinalCMS 用的是JFinal2.0,
0
启程者
启程者

放到Webapps之外目录也是一样的问题

<Context debug="0" docBase="D:\JFinalCMS" path="/JFinalCMS" reloadable="false">

奇怪的是<c:forEach items="${latestCertifiedEnterprisesMenu.articleList }" var="article">这种标签解析到了,没有标签的表达式:${latestCertifiedEnterprisesMenu.menu_name }这种没解析到

如上面第一张图片

0
南湖船老大
南湖船老大
JSTL的jar包没看到啊
0
启程者
启程者

之前把jstl-1.2.jar加上去也是一样效果,并且报警告

信息: Starting Servlet Engine: Apache Tomcat/7.0.52
六月 23, 2015 10:43:56 下午 org.apache.catalina.startup.TaglibUriRule body
信息: TLD skipped. URI: http://java.sun.com/jstl/core_rt is already defined
六月 23, 2015 10:43:56 下午 org.apache.catalina.startup.TaglibUriRule body
信息: TLD skipped. URI: http://java.sun.com/jstl/core is already defined
六月 23, 2015 10:43:56 下午 org.apache.catalina.startup.TaglibUriRule body
信息: TLD skipped. URI: http://java.sun.com/jsp/jstl/core is already defined
六月 23, 2015 10:43:56 下午 org.apache.catalina.startup.TaglibUriRule body
信息: TLD skipped. URI: http://java.sun.com/jstl/fmt_rt is already defined
六月 23, 2015 10:43:56 下午 org.apache.catalina.startup.TaglibUriRule body
信息: TLD skipped. URI: http://java.sun.com/jstl/fmt is already defined
六月 23, 2015 10:43:56 下午 org.apache.catalina.startup.TaglibUriRule body
信息: TLD skipped. URI: http://java.sun.com/jsp/jstl/fmt is already defined
六月 23, 2015 10:43:56 下午 org.apache.catalina.startup.TaglibUriRule body
信息: TLD skipped. URI: http://java.sun.com/jsp/jstl/functions is already defined
六月 23, 2015 10:43:56 下午 org.apache.catalina.startup.TaglibUriRule body
信息: TLD skipped. URI: http://jakarta.apache.org/taglibs/standard/permittedTaglibs is already defined
六月 23, 2015 10:43:56 下午 org.apache.catalina.startup.TaglibUriRule body
信息: TLD skipped. URI: http://jakarta.apache.org/taglibs/standard/scriptfree is already defined
六月 23, 2015 10:43:56 下午 org.apache.catalina.startup.TaglibUriRule body
信息: TLD skipped. URI: http://java.sun.com/jstl/sql_rt is already defined
六月 23, 2015 10:43:56 下午 org.apache.catalina.startup.TaglibUriRule body
信息: TLD skipped. URI: http://java.sun.com/jstl/sql is already defined
六月 23, 2015 10:43:56 下午 org.apache.catalina.startup.TaglibUriRule body
信息: TLD skipped. URI: http://java.sun.com/jsp/jstl/sql is already defined
六月 23, 2015 10:43:56 下午 org.apache.catalina.startup.TaglibUriRule body
信息: TLD skipped. URI: http://java.sun.com/jstl/xml_rt is already defined
六月 23, 2015 10:43:56 下午 org.apache.catalina.startup.TaglibUriRule body
信息: TLD skipped. URI: http://java.sun.com/jstl/xml is already defined
六月 23, 2015 10:43:56 下午 org.apache.catalina.startup.TaglibUriRule body
信息: TLD skipped. URI: http://java.sun.com/jsp/jstl/xml is already defined



返回顶部
顶部