Я работал над системой, которая обеспечивает двуязычную поддержку веб-сайта из базы данных, используя библиотеку тегов <spring:message />
.
Я могу читать / записывать файлы свойств приложений en / fr.Когда я жестко закодирую новый ключ <spring:message />
, он будет отображаться правильно.Пример) <spring:message code="f12345' />
отобразит «данные теста».
У меня возникли проблемы с использованием динамической клавиши.Независимо от того, как я пытаюсь прикрепить ключ, он не работает.
Вот методы, которые я пробовал группировать по конечному результату.
500 error org.apache.jasper.JasperException: (line: [104], столбец: [29]) Ожидается символ [цитата / равно]
<spring:message var><c:out value="${CLUObject.SpringKey_name()}" /></spring:message>
<spring:message var='<c:out value=\"${CLUObject.SpringKey_name()}\" />" text="wrong" />
<spring:message code="<c:out value="${CLUObject.SpringKey_name()}" />" text="${CLUObject.SpringKey_name()}" />
<spring:message code=<c:out value="${CLUObject.SpringKey_name()}" /> text="${CLUObject.SpringKey_name()}" />
<spring:message code= <c:out value="${CLUObject.SpringKey_name()}" /> />
Далее происходит сбой несерверного сервера, который просто приводит к тому, что таблица не отображается
<spring:message var='<c:out value="application.message" />' arguments="${CLUObject.SpringKey_name()}" />
<spring:message var='<c:out value="${CLUObject.SpringKey_name()}" />' text="wrong" />
<spring:message code="<c:out value=\"${CLUObject.SpringKey_name()}\" />" />
<spring:message code="${CLUObject.SpringKey_name()}" />
<spring:message code="messageCode" arguments="$value1}" />
<c:set var="temp" > <c:out value="${CLUObject.SpringKey_name()}" /> </c:set><td><spring:message code="messageCode" arguments="${temp}" htmlEscape="false" /></td>
Лучшее, что мне удалось получить - просто отобразить текст ключа вместо значения.Что уже можно сделать с помощью <spring:message text="${CLUObject.SpringKey_name()}" />'
В файле applicationResources
messageCode=Test message for {0}.
Затем внутри страницы jsp
<c:set var="temp" > <c:out value="${CLUObject.SpringKey_name()}" /> </c:set>
покажет "Тестовое сообщение для CLUVALUE.C1111. "
Я обнаружил один сайт онлайн, который, кажется, делал то же самое.
<form:select path="${path}">
<c:forEach var="i" items="${items}">
<form:option value="${i[itemValue]}">
<c:choose>
<c:when test="${localize}">
<spring:message code="${i[itemLabel]}" text="${i[itemLabel]}"/>
</c:when>
<c:otherwise>
<c:out value="${i[itemLabel]}"/>
</c:otherwise>
</c:choose>
</form:option>
Iнашли второй пример , где у них есть динамический ключ с сообщением пружины, используемым в цикле forEach.Ищите spring:message
и его 14 / 17.
<c:forEach items="${errors.allErrors}" var="error">
<spring:message code="${error.code}" text="${error.code}"/><br/>
</c:forEach>
Я нашел третий пример .
В трех найденных мной примерах spring:message
все используются одинаково, с одинаковыми атрибутами кода и текста.
Я не могу видеть вывод, и я не могу быть уверен, что вместо этого отображается их текстовый аргумент.
Вот блок контроллера
List<CLU_STRUT> myCLUs = cluService.BuildCLUs();
model.addAttribute("CommonLookUp", myCLUs);
А вотJSP
<c:forEach var="CLUObject" items="${CommonLookUp}" varStatus="vs">
<tr>
<c:set var="temp" > <c:out value="${CLUObject.SpringKey_name()}" /> </c:set>
<td><spring:message code="messageCode" arguments="${temp}" htmlEscape="false" /></td>
<td><c:if test="${CLUObject.getCountNew() gt 0}"> <a href='drillview?drillvalue=${CLUObject.SpringKey_name()}&mode=drill&drilltype=I'><c:out value="${CLUObject.getCountNew()}" /></a></c:if><c:if test="${CLUObject.getCountNew() eq 0}">0</c:if></td>
<td><c:if test="${CLUObject.getCountMod() gt 0}"> <a href='drillview?drillvalue=${CLUObject.SpringKey_name()}&mode=drill&drilltype=U'><c:out value="${CLUObject.getCountMod()}" /></a></c:if><c:if test="${CLUObject.getCountMod() eq 0}">0</c:if></td>
<td><c:if test="${CLUObject.getCountDelete() gt 0}"> <a href='drillview?drillvalue=${CLUObject.SpringKey_name()}&mode=drill&drilltype=D'><c:out value="${CLUObject.getCountDelete()}" /></a></c:if><c:if test="${CLUObject.getCountDelete() eq 0}">0</c:if></td>
<td><c:out value="${CLUObject.getCountTotal()}" /></td>
</tr>
</c:forEach>
TLDR; Как использовать spring: сообщение, когда ключ является динамическим на странице jsp.