Библиотека тегов Spring FORM — radiobutton, загружающая свой атрибут LABEL из источника сообщения

#spring #internationalization #radio-button

#spring #интернационализация #переключатель

Вопрос:

Я работаю над приложением на основе spring MVC и использую библиотеку тегов spring для привязки данных формы. Я с удовольствием использовал тег, пока не понял, что метки, связанные с отдельными радиостанциями, не были получены из источника сообщения, но я жестко запрограммировал их в JSP. Я как-то раньше не замечал, так что теперь я собирался это исправить, и здесь я столкнулся с глупой маленькой проблемой, с которой, я надеюсь, вы сможете мне помочь.

Хорошо, это работает:

 <form:radiobutton path="metric" value="0" label="inches" />
<form:radiobutton path="metric" value="1" label="centimeters" />
  

Этого не происходит.

 <form:radiobutton path="metric" value="0" label="<fmt:message key="label.calculator.units.imperial" />" />
<form:radiobutton path="metric" value="1" label="<fmt:message key="label.calculator.units.metric" /> " />
  

Проблема заключается в вложенности тега fmt:message в тег format:radiobutton. Я получаю вызванное: org.apache.jasper.JasperException: /WEB-INF/jsp/calculator/calculator.jsp(15,100) PWC6212: ожидаемый символ равенства в трассировке стека.

Есть ли какой-либо другой способ заставить метки переключателей загружаться из источника сообщения? Я думаю, я мог <c-rt:set> бы сначала установить текст сообщения из источника сообщения в переменную, а затем ${varname} в label="" атрибут… но это кажется немного многословным. Есть предложения?

Ответ №1:

Не <form:radiobutton> очень часто использовал тег, но, насколько я знаю, у вас нет другого выбора, кроме как установить сообщение в переменную, а затем использовать его как label="${varname}" .

Другим вариантом было бы потерять атрибут label и просто распечатать ярлык вручную, что-то вроде:

 <spring:message code="label.calculator.units.imperial" /><form:radiobutton path="metric" value="0" />
<spring:message code="label.calculator.units.metric" /><form:radiobutton path="metric" value="1" />
  

Конечно, результат HTML будет отличаться. Вам придется самостоятельно управлять меткой вместо тега переключателя, генерирующего a <label for="..." .

Комментарии:

1. спасибо, ваше spring: сообщение интересно. Я использовал его, чтобы установить для сообщения значение var=»metric», а затем использовал атрибут label для radiobutton ${metric} , и это сработало. Я просто не использовал fmt:message but spring:message (не заметил, что он существует) и разделил вложенные теги на два тега рядом. Немного хлопотно, но не так уж и плохо. Я бы не хотел потерять возможность создавать правильную HTML-разметку, печатая сообщение напрямую и не помещая его в ярлык. Эти ярлыки классные, они кликабельны 🙂

Ответ №2:

Возможно, установить атрибут ‘var’ тега spring:message:

 <spring:message var="inches" code="label.calculator.units.imperial"/>
<spring:message var="centimeters" code="label.calculator.units.imperial"/>

<form:radiobutton path="metric" value="0" label="${inches}"/>
<form:radiobutton path="metric" value="1" label="${centimeters}"/>