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

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

疾风者 发布于 2021-11-29 字数 325 浏览 664 回复 9

如果你对这篇文章有疑问,欢迎到本站 社区 发帖提问或使用手Q扫描下方二维码加群参与讨论,获取更多帮助。

扫码加入群聊

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(9

虐人心 2021-12-01 9 楼

之前把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

平生欢 2021-12-01 8 楼

JSTL的jar包没看到啊

明媚如初 2021-12-01 7 楼

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

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

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

如上面第一张图片

旧城烟雨 2021-12-01 6 楼

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

一笔一画续写前缘 2021-12-01 5 楼

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

注意一下 context path 是否正确

无人问我粥可暖 2021-12-01 4 楼

现在是在本地

檐上三寸雪 2021-12-01 3 楼

在本地开发时间有无问题?

深巷少女 2021-12-01 2 楼

谢谢正解! 每个页面加上<%@ page isELIgnored="false"%>

醉酒的小男人 2021-12-01 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表达式 。