Как да активирам локализация в атрибута на HTML етикет?

Имам HTML етикет в моята JSP страница, който трябва да локализирам. Споменах го по-долу

<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)

Бихте ли ми казали как да вградя <fmt:messageв атрибута за описание на HTML етикета? И също така ме насочвайте, ако правя нещо нередно. Тъй като тагът работи като самостоятелен таг, но извежда грешка, когато се постави в някой HTML атрибут, както е споменато по-горе.

ЗАБЕЛЕЖКА: Използвам Spring3, Java 1.6 и горната страница е JSP. Сървърът е Tomcat 6.02


person Shiv Kumar Ganesh    schedule 17.09.2012    source източник


Отговори (3)


Предлагам да използвате spring:message етикет:

<spring:message code="firstName" var="firstName_label" />
<form:input description="${firstName_label}" />
person nobeh    schedule 17.09.2012
comment
Тъй като имаме повече от 70 полета на всяка страница, използването й за всяко поле е наистина тромаво. Моля, предложете нещо, което би било като единичен етикет :). Ще съм благодарен, ако можете да ми покажете повторното използване на самия fmt етикет. - person Shiv Kumar Ganesh; 17.09.2012
comment
Моля, помогнете ли да поправите това нещо. Би било от голяма помощ :) - person Shiv Kumar Ganesh; 17.09.2012
comment
@nobeh е прав. Можете да поставите JSP таг в HTML таг, защото първият ще бъде изобразен на сървъра, а вторият ще получи изобразената стойност. Но не мисля, че можете да вмъкнете JSP таг в друг. Този отговор предлага правилен формат за вашата JSP страница. Ако е тромаво е заради 70 полета, а не заради 2 тагова. Друг подход би бил да направите свой собствен JSP таг за генериране на правилен код или да създадете малък JSP фрагмент и да го използвате с параметри като код на съобщение, име на вход и т.н. - person helios; 17.09.2012
comment
@helios много добре каза helios. Това може да е един от вероятните начини, но бихте ли ме насочили към някакъв урок, където мога да направя свои собствени JSP тагове, за да се справя с такава ситуация :) ?? - person Shiv Kumar Ganesh; 17.09.2012
comment
Ако наистина не искате да използвате Spring етикети, може би идея като тази може да ви помогне по-добре да замените с fmt:message . - person nobeh; 17.09.2012
comment
@ShivKumarGanesh: Потърсих в Google и намерих неофициален урок (viralpatel.net/blogs/). Изглежда хубаво, защото е кратко и точно (декларирайте TLD, създайте клас, програмирайте doStart/endTag). Но нямам много опит с това, просто модифицирах taglib веднъж :) - person helios; 17.09.2012

Опитайте да добавите кавички около етикета:

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

или алтернативно копиране на стойността в променлива и препращане към нея чрез JSTL:

<c:set var="descLoc">
    <fmt:message key="firstName" />
</c:set>

description="${descLoc}"

Предупреждение: кодът не е тестван, така че може да има печатни грешки или грешки.

person nickdos    schedule 17.09.2012
comment
Първото нещо, което споменахте, дава изход като низ :( . Второто ще работи със сигурност, но ако можете да поправите първото, би било страхотно!! - person Shiv Kumar Ganesh; 17.09.2012
comment
Променихте ли вътрешните кавички на единични? - person nickdos; 17.09.2012
comment
Да, изпробвах го. Резултатът показва описанието=‹fmt:message key='firstName'/› :( Не се компилира. - person Shiv Kumar Ganesh; 17.09.2012
comment
между другото във втория метод, който посочихте към използването на ‹C:VAR, не виждам свойство като такова в моята IDE, можете ли да ме уведомите за кой JSTL се отнася? - person Shiv Kumar Ganesh; 17.09.2012
comment
Да, страхотно.... <c:set> работи страхотно!! :) Благодаря много. Но все още търся дали има по-добър начин. Ако не, ще получите правилния отговор :) - person Shiv Kumar Ganesh; 17.09.2012
comment
Можете да поставите <fmt:message> в нормални HTML тагове, но не и в други JSP тагове, както в примера по-горе (<form:input>). Заобиколно решение е да кодирате това input като обикновен HTML, като <input name="firstName" .../> - използвайте източника на браузъра, за да видите как това трябва да бъде кодирано. - person nickdos; 18.09.2012

Не си прочел правилно изключението. Конкретно ви казва проблема. Не сте поставили етикета в двойните кавички. Опитайте се да поставите двойни кавички в описанието.

Това трябва да реши проблема ви. наздраве

person Japan Trivedi    schedule 17.09.2012