form标签


要使用Spring Web MVC的表单标签,需要在页面引入,示例如下:


<%@taglib uri="http://www.springframework.org/tags/form" prefix="form"%>


 



form标签



它会自动的绑定来自Model中的一个属性值到当前form对应的实体对象,默认是command属性,这样我们就可以在form表单体里面方便的使用该对象的属性了;



通常我们都会指定commandName或modelAttribute 属性,来指定使用绑定到的JavaBean的名称,这两个属性功能基本一致。



示例如下:


"/mvcexample/add" method=  
   "post" modelAttribute=  
   "um">


注意: modelAttribute所指定的Bean的名字,一定要在request等属性里面有,否则页面会报错的



 



input标签



input标签会被渲染为一个type为text的普通Html input标签。使用SpringMVC的input标签的唯一作用就是它能绑定表单数据。SpringMVC表单标签最大的好处就是它支持数据绑定,当我们的表单标签不需要绑定的数据的时候,我们应该使用普通的Html标签。



hidden标签



用法跟input标签一样,也能绑定表单数据,只是它生成的是一个隐藏域。



password标签



password标签将会被渲染为一个type为password的普通HTML input标签



textarea标签



extarea标签将被渲染为普通HTML textarea标签



checkbox标签



checkbox标签会被渲染为一个type为checkbox的普通HTML input标签。checkbox标签也是支持绑定数据的。checkbox标签的选中与否状态是根据它绑定的值来判断的



当checkbox绑定的是一个boolean数据的时候,那么checkbox的状态跟该boolean数据的状态是一样的,即true对应选中,false对应不选中



 



绑定列表数据,如数组、List和Set 等的时候,是当checkbox标签的value在我们绑定的列表数据中存在的时候该checkbox将为选中状态 ,示例如下:



1:假如在UserModel中有如下数据:



private List<String> deps = new ArrayList<String>(); 
      
 
      

        //省略对应的getter/setter 
      
 
      

        2:在Controller的方法中,给deps赋值,示例如下: 
      
 
      

        @RequestMapping("/toAdd") 
      
 
      

        public String toAdd(@ModelAttribute("um") UserModel um){ 
      
 
      

        um.getDeps().add("dep1"); 
      
 
      

        um.getDeps().add("dep2"); 
      
 
      

        return "user/add"; 
      
 
      

        }



3:页面上:


"deps" value=  
       "dep1"/>dep1 
      
 
      
"deps" value=  
       "dep2"/>dep2 
      
 
      
"deps" value=  
       "dep3"/>dep3

 



结果:那么页面上的dep1和dep2会选中



当checkbox绑定的是一个Object数据的时候,会拿所绑定对象数据的toString结果跟当前checkbox的value进行比较,如果能够进行匹配则该checkbox将为选中状态。



 



checkboxes标签



n用来根据给定的数据,生成一组多选框,必须指定path和items



1:path:所绑定对象的属性,也就是用来判断是否被选中的项



2:items:用来展现的项,也就是总共有多少项



1:比如在UserModel里面添加如下的属性:


private List<String> allDeps = new ArrayList<String>(); 
      
 
      

        private List<String> deps = new ArrayList<String>(); 
      
 
      

        //省略对应的getter/setter



2:在Controller方法里面:



um.getAllDeps().add("dep1"); 
      
 
      

        um.getAllDeps().add("dep2"); 
      
 
      

        um.getAllDeps().add("dep3"); 
      
 
      

        um.getAllDeps().add("dep4"); 
      
 
      

        // 
      
 
      

        um.getDeps().add("dep1");



um.getDeps().add("dep2");

3:在页面上


<form:checkboxes items="${um.allDeps}" path="deps"/>


结果是:出现4个部门,但是dep1和2选中



n如果要想最后生成的chechkbox的表现值和value不一样,可以使用map,那么此时会根据Map的key进行判断是否选中



n



1:比如在UserModel里面添加如下的属性:



private Map<String,String> allDeps = new HashMap<String,String>();private List<String> deps = new ArrayList<String>();


//省略对应的getter/setter



2:在Controller方法里面:


("d1",
 
        

          um.getAllDeps().put("d2", "dep2"); 
        
 
        

          um.getAllDeps().put("d3", "dep3"); 
        
 
        

          um.getAllDeps().put("d4", "dep4"); 
        
 
        

          ///



("d1");



um.getDeps().add("d2");

3:在页面上



<form:checkboxes items="${um.allDeps}" path="deps"/>


结果是:出现4个部门,但是dep1和2选中



form下的其它标签



nradiobutton和radiobuttons标签



基本等同于checkbox和checkboxes标签的用法



nselect标签



类似于前面的checkboxes的使用,同样指定path和items,使用前面的数据示例:



<form:select path="deps" items="${um.allDeps}" multiple="false"></form:select>



1:如果绑定的items数据是map的话,那么key作为option的value,而map的值作为option显示的数据



2:如果集合数据又是一个对象的话,可以通过指定属性itemLabel和itemValue来指定将用于呈现的option Label和Value



3:如果集合中是其它数据的话,那就是既做option的value,也做option的显示数据



noption标签



如果select标签没有指定items属性,那么可以使用option标签来指定选项。其用法基本类似于HTML的option标签,就是多个数据绑定的功能,也就是能根据具体值来判断是否需要选中这项。



noptions标签



如果select标签没有指定items属性,那么可以使用options标签来指定选项。



其用法基本类似于指定select标签的items属性,区别是:



1:select标签指定items属性,会忽略所有标签体内写的option



2:options标签前后均可以再手工添加option,比如:



<form:select path="deps"  multiple="false">



<option value="1">请选择</option>



<form:options items="${um.allDeps}"/>



</form:select>



nerrors标签



用来展现Errors对象中包含的错误信息。通过errors标签的path属性来绑定一个错误信息。可以通过path属性来展现两种类型的错误信息。



1:所有的错误信息,这个时候path的值应该置为“*”



2:当前对象的某一个域的错误信息,这个时候path应为所需展现的域的名称