您的位置:首页 > 编程语言 > Java开发

第十一章:表单标签——深入浅出学Spring Web MVC

2015-11-04 11:58 555 查看
form标签
要使用Spring Web MVC的表单标签,需要在页面引入,示例如下:
<%@taglib uri="http://www.springframework.org/tags/form" prefix="form"%>

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

通常我们都会指定commandName或modelAttribute 属性,来指定使用绑定到的JavaBean的名称,这两个属性功能基本一致。
示例如下:
<form:form action= "/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:页面上:
<form:checkbox path= "deps" value= "dep1"/>dep1
<form:checkbox path= "deps" value= "dep2"/>dep2
<form:checkbox path= "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方法里面:
um.getAllDeps().put ("d1", "dep1");
um.getAllDeps().put("d2", "dep2");
um.getAllDeps().put("d3", "dep3");
um.getAllDeps().put("d4", "dep4");
///////////////////////////
um.getDeps().add ("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应为所需展现的域的名称
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: