如何使用<fmt:setlocale>?</fmt:setlocale>为JSP设置语言环境

时间:2010-11-12 23:35:05

标签: jsp jstl locale setlocale

我正在尝试在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"/>

我得到同样的错误。

1 个答案:

答案 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/libTomcat/lib实际上有一个过时的JSTL版本,例如JSTL 1.0,甚至是遗留的雅加达版本,也会发生这种情况。对于Tomcat 6.x或更新版本,最好选择JSTL 1.2 here(并且不要忘记删除旧的standard.jar!)。