在Servlet 3.0,Struts 2和Tiles 2应用程序中使用JSTL是否存在任何已知问题?
请考虑以下代码段:
<tiles:useAttribute id="list" name="importCss" classname="java.util.List" />
<c:forEach var="item" items="${list}">
<link rel="stylesheet" type="text/css" href="${item}.css" media="all"/>
</c:forEach>
只要我们的web.xml将应用程序定义为Servlet 2.4应用程序,这将导致生成CSS链接列表并正常工作。
但是,当更改为使用Servlet 3.0时,访问页面时会出现以下错误:
JBWEB000236: Servlet.service() for servlet default threw exception: java.io.FileNotFoundException: \
JBWEB000088: The requested resource (/application/WEB-INF/jsp/templates/${item}) is not available
这意味着在<link rel="stylesheet" type="text/css" href="${item}.css" media="all"/>
${item}
表达式<web-app
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_3_0.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_3_0.xsd"
id="Webapp_ID" version="3.0">
没有得到解决,所以我假设使用表达式或JSTL已经从Servlet 2.4更改为3.0或者是库/配置问题。
如何解决该问题的任何想法或建议?
工作配置:
配置损坏:
根据要求提供的其他信息:它似乎适用于Windows(到目前为止Servlet 2.4和3.0都没有出现错误)但在Linux上没有(2.4无效,3.0无效)。
根据要求,这里是Servlet 3.0的web.xml的负责人:
{{1}}
更新
进一步的测试似乎暗示了包装,即当应用程序被部署为打包的ear文件时,它在Windows和Linux上都不起作用 - 同时将应用程序部署为爆炸的耳朵它可以工作至少在Windows上。
更新2 [解决方案]:
事实证明,当构建打包的应用程序时,我们的构建过程包含JSP预编译任务(应用程序已从JBoss 4.2.3迁移到7.2.0)。到目前为止JBoss并没有抱怨预编译的JSP,但似乎JBoss 6+(https://community.jboss.org/message/735536)既不需要也不支持预编译JSP,而我们的JspC任务使用旧的Tomcat 5 JspC实现,这自然不会#&# 39; t支持Servlet 3.0。
答案 0 :(得分:1)
它应该是权限问题,如果它适用于Windows而不适用于Linux,请确保您具有读取WEB-INF / lib(chmod)或JSTL jar的权限。
答案 1 :(得分:0)
使用此代码可以正常工作..
<tiles:importAttribute name="css" />
<!-- Css of specific jsp -->
<c:forEach items="${css}" var="cssfile">
<link rel="stylesheet" href="${cssfile}">
</c:forEach>