【问题标题】:How to enable Localization inside HTML tag Attribute?如何在 HTML 标签属性中启用本地化?
【发布时间】:2012-09-17 09:32:45
【问题描述】:

我的 JSP 页面中有需要本地化的 HTML 标记。我在下面提到过

<form:input path="firstName" cssStyle="width:155px;" description=<fmt:message
key="firstName" /> mandatory="true"
title="Enter First Name as in Corp. Directory"
validation="mavenname" maxlength="50" />

编译时出现以下错误。

Sep 17, 2012 2:12:51 PM org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet dispatcher threw exception
org.apache.jasper.JasperException: /WEB-INF/jsp/resource/GeneralDetails.jsp(72,23) quote symbol expected
    at org.apache.jasper.compiler.DefaultErrorHandler.jspError(DefaultErrorHandler.java:40)
    at org.apache.jasper.compiler.ErrorDispatcher.dispatch(ErrorDispatcher.java:407)
    at org.apache.jasper.compiler.ErrorDispatcher.jspError(ErrorDispatcher.java:88)
    at org.apache.jasper.compiler.Parser.parseAttribute(Parser.java:198)
    at org.apache.jasper.compiler.Parser.parseAttributes(Parser.java:148)
    at org.apache.jasper.compiler.Parser.parseCustomTag(Parser.java:1207)
    at org.apache.jasper.compiler.Parser.parseElements(Parser.java:1421)
    at org.apache.jasper.compiler.Parser.parseBody(Parser.java:1633)
    at org.apache.jasper.compiler.Parser.parseOptionalBody(Parser.java:977)
    at org.apache.jasper.compiler.Parser.parseCustomTag(Parser.java:1245)
    at org.apache.jasper.compiler.Parser.parseElements(Parser.java:1421)
    at org.apache.jasper.compiler.Parser.parseBody(Parser.java:1633)
    at org.apache.jasper.compiler.Parser.parseOptionalBody(Parser.java:977)
    at org.apache.jasper.compiler.Parser.parseCustomTag(Parser.java:1245)
    at org.apache.jasper.compiler.Parser.parseElements(Parser.java:1421)
    at org.apache.jasper.compiler.Parser.parse(Parser.java:130)
    at org.apache.jasper.compiler.ParserController.doParse(ParserController.java:255)
    at org.apache.jasper.compiler.ParserController.parse(ParserController.java:103)
    at org.apache.jasper.compiler.Compiler.generateJava(Compiler.java:185)
    at org.apache.jasper.compiler.Compiler.compile(Compiler.java:347)
    at org.apache.jasper.compiler.Compiler.compile(Compiler.java:327)
    at org.apache.jasper.compiler.Compiler.compile(Compiler.java:314)
    at org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:592)
    at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:317)
    at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
    at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:646)
    at org.apache.catalina.core.ApplicationDispatcher.doInclude(ApplicationDispatcher.java:551)
    at org.apache.catalina.core.ApplicationDispatcher.include(ApplicationDispatcher.java:488)
    at org.apache.jasper.runtime.JspRuntimeLibrary.include(JspRuntimeLibrary.java:968)
    at org.apache.jsp.WEB_002dINF.jsp.resource.ResComponent_jsp._jspService(ResComponent_jsp.java:2090)
    at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
    at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:377)
    at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
    at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:646)
    at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:436)
    at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:374)
    at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:302)
    at org.springframework.web.servlet.view.InternalResourceView.renderMergedOutputModel(InternalResourceView.java:238)
    at org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:250)
    at org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1047)
    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:817)
    at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:719)
    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:669)
    at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:574)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:857)
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
    at java.lang.Thread.run(Unknown Source)

能否告诉我如何在 HTML 标签的描述属性中嵌入&lt;fmt:message?如果我做错了什么,也请指导我。由于标签作为独立标签工作,但如上所述放入某些 HTML 属性时会引发错误。

注意:我使用的是 Spring3,Java 1.6,上面的页面是一个 JSP。服务器是Tomcat 6.02

【问题讨论】:

    标签: java spring jsp jakarta-ee jsp-tags


    【解决方案1】:

    我建议使用spring:message 标签:

    <spring:message code="firstName" var="firstName_label" />
    <form:input description="${firstName_label}" />
    

    【讨论】:

    • 由于我们每页有 70 多个字段,因此在每个字段中使用它真的很麻烦。请建议一些类似于单个标签的内容 :) 。如果您能向我展示 fmt 标签本身的重用,我将不胜感激。
    • 请您帮忙解决这个问题。会很有帮助:)
    • @nobeh 是对的。您可以将 JSP 标记放在 HTML 标记中,因为第一个将在服务器上呈现,而第二个将接收呈现的值。但我认为您不能将 JSP 标记嵌套到另一个标记中。此答案为您的 JSP 页面建议了正确的格式。如果它很麻烦是因为 70 个字段,而不是因为 2 个标签。另一种方法是制作自己的 JSP 标签来生成正确的代码,或者创建一个小的 JSP 片段并将其与“消息代码”、“输入名称”等参数一起使用。
    • @helios helios 说得很好。这可能是一种可能的方式,但您能否指点我一些教程,在那里我可以制作自己的 JSP 标签来处理这种情况:) ??
    • 如果你实在不想使用Spring标签,或许this one之类的想法可以帮你更好的替换成fmt:message
    【解决方案2】:

    尝试在标签周围添加引号:

    description="<fmt:message key='firstName' />"
    

    或者将值复制到变量并通过 JSTL 引用它:

    <c:set var="descLoc">
        <fmt:message key="firstName" />
    </c:set>
    
    description="${descLoc}"
    

    警告:代码未经测试,因此可能存在拼写错误或错误。

    【讨论】:

    • 你提到的第一件事给出了输出,例如一个字符串:(。第二个肯定会工作,但如果你能修复第一个,那就太好了!!
    • 你把内引号改成单引号了吗?
    • 是的,我试过了。输出显示 description="" :( 它没有被编译。
    • 顺便说一下,在您指出使用
    • 是的,太好了....&lt;c:set&gt; 效果很好!! :) 非常感谢。但我仍在寻找是否有更好的方法。如果没有,你会得到正确的答案:)
    【解决方案3】:

    您没有正确阅读异常。它专门告诉你问题所在。 您没有将标签放在双引号中。尝试在描述中加上双引号。

    它应该可以解决您的问题。干杯。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-08-28
      • 2011-02-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-01
      • 2011-10-02
      • 1970-01-01
      相关资源
      最近更新 更多