Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java EE (J2EE) и Spring > Spring MVC


Автор: gelo86 8.3.2008, 16:33
Jesli ja ispolzuju Spring + Velocity. Sozdaju formu i naprimer delaju commandu tipa Role.class.
Role soderzit Integer id i String name;

Ispolzuju:

    #springBind( "role.id" )
  <input type="text" 
    name="${status.expression}" 
    value="$!status.value" />

Jesli ja wwozu mesto cifr stroku to tomcat kidajet takuju osibku:

org.springframework.web.bind.ServletRequestBindingException: Errors binding onto object 'role'; nested exception is org.springframework.validation.BindException: org.springframework.validation.BeanPropertyBindingResult: 1 errors
Field error in object 'role' on field 'id': rejected value [43rew]; codes [typeMismatch.role.id,typeMismatch.id,typeMismatch.java.lang.Integer,typeMismatch]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [role.id,id]; arguments []; default message [id]]; default message [Failed to convert property value of type [java.lang.String] to required type [java.lang.Integer] for property 'id'; nested exception is java.lang.NumberFormatException: For input string: "43rew"]
    org.springframework.web.bind.ServletRequestDataBinder.closeNoCatch(ServletRequestDataBinder.java:121)
    org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter$ArgumentsResolver.resolveArguments(AnnotationMethodHandlerAdapter.java:646)
    org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(AnnotationMethodHandlerAdapter.java:254)
    org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:875)
    org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:809)
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:476)
    org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:441)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:803)



Osibka poniatna. No kak delajetsya stob nelamalas necego a naprimer programno mozno bilo obrabatiwat takije osibki?

Автор: greef 8.3.2008, 20:58
Цитата

stob nelamalas necego


Что не ломалось?
Чтоб обработать введенные данные напиши валидатор. Например:
https://springmodules.dev.java.net/docs/reference/0.4/html/validation.html

Хотя я б проверял и на стороне клиента тоже, использую js. Зачем лишний раз отправлять данные?
Но в любом случае server validation необходима.

Автор: Kangaroo 8.3.2008, 21:09
gelo86
сделай id Integer'ом и переопредели метод initBinder в твоем контроллере так:
Код

@Override
    protected void initBinder(HttpServletRequest request, ServletRequestDataBinder binder) throws Exception {        
        PropertyEditor intEditor = new CustomNumberEditor(Integer.class, true);
        binder.registerCustomEditor(Integer.class, intEditor);    
        super.initBinder(request, binder);
    }

Editor'ы отвечают за биндинг данных с формы и вывод их на форму. Этот при ошибке будет устанавливать поле в null. А дальше уже с
валидатором играйся.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)