#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
butspring: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}"/>