我正在尝试在JSP中设置本地。
我以为我可以做类似的事情:
<fmt:setLocale value="${param['local']}" scope="session"/>
Java's own page on the topic似乎完全是这么说的。
但是,当我执行此操作时,我得到:
HTTP Status 500 -
type Exception report
message
description The server encountered an internal error () that prevented it from fulfilling this request.
exception
org.apache.jasper.JasperException: /pages/ResourceBundlesJSTL.jsp(11,0) According to TLD or attribute directive in tag file, attribute value does not accept any expressions
org.apache.jasper.compiler.DefaultErrorHandler.jspError(DefaultErrorHandler.java:40)
org.apache.jasper.compiler.ErrorDispatcher.dispatch(ErrorDispatcher.java:407)
org.apache.jasper.compiler.ErrorDispatcher.jspError(ErrorDispatcher.java:148)
org.apache.jasper.compiler.Validator$ValidateVisitor.checkXmlAttributes(Validator.java:1232)
org.apache.jasper.compiler.Validator$ValidateVisitor.visit(Validator.java:868)
org.apache.jasper.compiler.Node$CustomTag.accept(Node.java:1539)
org.apache.jasper.compiler.Node$Nodes.visit(Node.java:2376)
org.apache.jasper.compiler.Node$Visitor.visitBody(Node.java:2428)
org.apache.jasper.compiler.Node$Visitor.visit(Node.java:2434)
org.apache.jasper.compiler.Node$Root.accept(Node.java:475)
org.apache.jasper.compiler.Node$Nodes.visit(Node.java:2376)
org.apache.jasper.compiler.Validator.validateExDirectives(Validator.java:1787)
org.apache.jasper.compiler.Compiler.generateJava(Compiler.java:211)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:360)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:340)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:327)
org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:594)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:316)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:320)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265)
javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
note The full stack trace of the root cause is available in the Apache Tomcat/7.0.2 logs.
Apache Tomcat/7.0.2
我也试过
<fmt:setLocale value="<%= param['local'] %>" scope="session"/>
我得到同样的错误。
答案 0 :(得分:5)
有几种可能的原因。从你的问题中直接看出它是哪一个。无论如何,我会在这里提到它们。
如果您的web.xml
根声明至少不符合Servlet 2.4(这意味着JSP 2.0在运行时taglib中支持EL时),就会发生这种情况。由于已经有好几年之久了,而且你正在使用与Servlet 3.0兼容的servlet容器,我将它重新声明为Servlet 3.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_3_0.xsd"
version="3.0">
如果fmt
taglib声明至少不符合JSTL 1.1(专为JSP 2.0设计),也会发生这种情况。确保它看起来像TLDDOC:
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
(缺少/jsp
表示JSTL 1.0)
如果您的Webapp/WEB-INF/lib
或Tomcat/lib
实际上有一个过时的JSTL版本,例如JSTL 1.0,甚至是遗留的雅加达版本,也会发生这种情况。对于Tomcat 6.x或更新版本,最好选择JSTL 1.2 here(并且不要忘记删除旧的standard.jar
!)。