Как включить локализацию внутри атрибута тега 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: я погуглил и нашел неофициальное руководство (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