2011-01-31 12 views
8

Zrobiłem kilka wyszukiwania w internecie i w stackoverflow, aby zobaczyć, jak obsługiwać następujący komunikat, że dostać się na jednej z moich ekranów:Wiosna Wykorzystanie komunikatów typeMismatch

Nie można przekonwertować wartości nieruchomości z typu [java.lang.String] do wymaganego typ [java.lang.Long] dla właściwości "qtyToShip"; wyjątek zagnieżdżonych jest java.lang.IllegalArgumentException: nie można przetworzyć numer: Unparseable numer: „a”

Od badań i patrząc na internecie Przypuszczałem, że dodanie następujących do mojego pliku errors.properties będzie produkować pożądane wyniki:

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 

Dodaję wartości całkowite do wiadomości, aby ustalić, który z nich się pojawi.

Teraz na szczycie mojego JSP mam następujący:

<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> 

powyżej jest poza moim formularzu, w moim formularzu mam następujący (testowanie ideały)

Tak więc po uruchomieniu mojego kodu, aby wywołać błąd, widzę, że w moim formularzu pojawia się następujący komunikat:

1. Invalid value for Qty To Ship, accepts only numbers. 

który pochodzi z tego: typeMismatch.shippingCommand.qtyToShip

na zewnątrz displayes forma:

Invalid type entered 

Co ja nie rozumiem, dlaczego jestem w stanie wyświetlić poprawną wiadomość w mojej formie, ale nie na zewnątrz?

W regulatorze Dodałem następujące:

@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)); 
} 

Dzięki

Odpowiedz

6

Może error.code nie gwarantuje zwrotu najbardziej konkretny kod komunikatu. Spróbuj przekazać komunikat o błędzie jako całość:

<spring:message message = "${error}" /> 
+2

Son Of A Gun - to się udało. Dzięki – boyd4715