spring mvc使用@InitBinder 标签对表单数据绑定

    xiaoxiao2021-03-25  117

    在SpringMVC中,bean中定义了Date,double等类型,如果没有做任何处理的话,日期以及double都无法绑定。

    解决的办法就是使用spring mvc提供的@InitBinder标签

    在我的项目中是在BaseController中增加方法initBinder,并使用注解@InitBinder标注,那么spring mvc在绑定表单之前,都会先注册这些编辑器,当然你如果不嫌麻烦,你也可以单独的写在你的每一个controller中。剩下的控制器都继承该类。spring自己提供了大量的实现类,诸如CustomDateEditor ,CustomBooleanEditor,CustomNumberEditor等许多,基本上够用

    当然,我们也可以不使用他自己自带这些编辑器类,那下面我们自己去构造几个

    [java]  view plain  copy   import org.springframework.beans.propertyeditors.PropertiesEditor;      public class DoubleEditor extends PropertiesEditor {         @Override         public void setAsText(String text) throws IllegalArgumentException {             if (text == null || text.equals("")) {                 text = "0";             }             setValue(Double.parseDouble(text));         }              @Override         public String getAsText() {             return getValue().toString();         }     }    [java]  view plain  copy   import org.springframework.beans.propertyeditors.PropertiesEditor;      public class IntegerEditor extends PropertiesEditor {         @Override         public void setAsText(String text) throws IllegalArgumentException {             if (text == null || text.equals("")) {                 text = "0";             }             setValue(Integer.parseInt(text));         }              @Override         public String getAsText() {             return getValue().toString();         }     }    [java]  view plain  copy   import org.springframework.beans.propertyeditors.PropertiesEditor;      public class FloatEditor extends PropertiesEditor {         @Override         public void setAsText(String text) throws IllegalArgumentException {             if (text == null || text.equals("")) {                 text = "0";             }             setValue(Float.parseFloat(text));         }              @Override         public String getAsText() {             return getValue().toString();         }     }     [java]  view plain  copy   import org.springframework.beans.propertyeditors.PropertiesEditor;      public class LongEditor extends PropertiesEditor {         @Override         public void setAsText(String text) throws IllegalArgumentException {             if (text == null || text.equals("")) {                 text = "0";             }             setValue(Long.parseLong(text));         }              @Override         public String getAsText() {             return getValue().toString();         }     }     在BaseController中

    [java]  view plain  copy   @InitBinder        protected void initBinder(WebDataBinder binder) {            binder.registerCustomEditor(Date.classnew CustomDateEditor(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"), true));     /        binder.registerCustomEditor(int.classnew CustomNumberEditor(int.classtrue));            binder.registerCustomEditor(int.classnew IntegerEditor());     /        binder.registerCustomEditor(long.classnew CustomNumberEditor(long.classtrue));          binder.registerCustomEditor(long.classnew LongEditor());            binder.registerCustomEditor(double.classnew DoubleEditor());            binder.registerCustomEditor(float.classnew FloatEditor());        }   

    [java]  view plain  copy   public class org.springframework.beans.propertyeditors.PropertiesEditor extends java.beans.PropertyEditorSupport {   看到没?如果你的编辑器类直接继承PropertyEditorSupport也可以。
    转载请注明原文地址: https://ju.6miu.com/read-18020.html

    最新回复(0)