Я сделал несколько поисков в Интернете и в stackoverflow, чтобы увидеть, как обрабатывать следующее сообщение, которое я получаю на одном из моих экранов:
Не удалось преобразовать значение свойства
введите [java.lang.String] в обязательный
введите [java.lang.Long] для свойства
'QtyToShip'; вложенное исключение
java.lang.IllegalArgumentException:
Не удалось разобрать номер: не разбирается
номер: "а"
Исходя из исследований и просмотра веб-страниц, я предположил, что добавление следующего к моему файлу errors.properties даст желаемые результаты:
typeMismatch.shippingCommand.qtyToShip=1. Invalid value for Qty To Ship, accepts only numbers.
typeMismatch.qtyToShip=2. Invalid value for Qty To Ship, accepts only numbers.
shippingCommand.qtyToShip=3. Invalid value for Qty To Ship, accepts only numbers.
qtyToShip=4. Invalid value for Qty To Ship, accepts only numbers.
typeMismatch.java.lang.NumberFormatException=5. Invalid value for {0}, accepts only numbers.
typeMismatch.java.lang.Integer=Must specify an integer value.
typeMismatch.java.lang.Long=Must specify an integer value.
typeMismatch.java.lang.Float=Must specify a decimal value.
typeMismatch.java.lang.Double=Must specify a decimal value.
typeMismatch.int=Invalid number entered
typeMismatch=Invalid type entered
Я добавляю целые значения к сообщению, чтобы определить, какое из них будет отображаться.
Теперь в верхней части моего JSP у меня есть следующее:
<center>
<spring:hasBindErrors name="shippingCommand">
<c:if test="${errors.errorCount > 0 }">
<h4>Following errors need to be corrected:</h4>
<font color="red">
<c:forEach items="${errors.allErrors}" var="error">
<spring:message code="${error.code}" arguments="${err.arguments}" text="${error.defaultMessage}"/><br />
</c:forEach>
</font>
</c:if>
</spring:hasBindErrors>
</center>
Вышеизложенное находится за пределами моей Формы, внутри моей формы есть следующее (проверка идеалов)
В результате получается, что когда я запускаю свой код, чтобы вызвать ошибку, я вижу, что внутри формы я получаю следующее сообщение:
1. Invalid value for Qty To Ship, accepts only numbers.
Что из этого следует: typeMismatch.shippingCommand.qtyToShip
Снаружи формы отображается:
Invalid type entered
Что я не понимаю, так это то, почему я могу отображать правильное сообщение внутри своей формы, но не снаружи?
В контроллере я добавил следующее:
@Override
protected void initBinder(HttpServletRequest pRequest, ServletRequestDataBinder pBinder) throws Exception
{
NumberFormat numberFormat = NumberFormat.getInstance();
pBinder.registerCustomEditor(Long.class, "qtyToShip", new CustomNumberEditor(Long.class, numberFormat, false));
}
Спасибо