Весеннее использование сообщений typeMismatch - PullRequest
8 голосов
/ 31 января 2011

Я сделал несколько поисков в Интернете и в 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));
}

Спасибо

1 Ответ

6 голосов
/ 31 января 2011

Возможно, error.code не гарантирует возвращение наиболее конкретного кода сообщения. Попробуйте передать сообщение об ошибке в целом:

<spring:message message = "${error}" />   
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...