Bri*_*ler 0 jsp locale jstl setlocale
我正在尝试在JSP中设置本地.
我以为我能做的事情如下:
<fmt:setLocale value="${param['local']}" scope="session"/>
Run Code Online (Sandbox Code Playgroud)
关于这个主题的Java自己的页面似乎说得非常多.
但是,当我去执行它时,我得到:
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
Run Code Online (Sandbox Code Playgroud)
我也试过了
<fmt:setLocale value="<%= param['local'] %>" scope="session"/>
Run Code Online (Sandbox Code Playgroud)
我得到了同样的错误.
有几种可能的原因.从你的问题中直接看出它是哪一个.无论如何我会在这里提到它们.
如果您的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">
Run Code Online (Sandbox Code Playgroud)如果fmttaglib声明至少不符合JSTL 1.1(专为JSP 2.0设计),也会发生这种情况.确保它看起来像TLDDOC:
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
Run Code Online (Sandbox Code Playgroud)
(没有/jsp表示JSTL 1.0)
如果您的JSTL版本中存在过时的JSTL版本,Webapp/WEB-INF/lib或者Tomcat/lib像JSTL 1.0甚至是遗留的雅加达版本,也会发生这种情况.对于Tomcat 6.x或更新版本,最好在这里选择JSTL 1.2 (并且不要忘记删除旧版本standard.jar!).