Struts2UI标签之表单标签:
- Struts2中的表单标签还是比较好用的,但是也存在不好的地方。例如主题部分一点也不灵活,所以没什么人使用它提供的主题。
- Struts2标签的优势:
- 简化代码
- 自动数据回显。
- 指定主题样式(个人感觉是缺点。)
- 表单标签入门:首先我们来对比一下普通的HTML表单和struts2提供的表单的区别:
<form action="<c:url value='/user/LoginAction.action'/>" method="post"> 用户名 <input type="text" name="username"/><br/> 密 码 <input type="password" name="password"/><br/> <input type="submit" value="登录"/> </form> <hr/> <s:form action="LoginAction" namespace="/user"> <s:textfield name="username" label="用户名" /> <s:password name="password" label="密 码" /> <s:submit value="登录" /> </s:form>
- 下面是前面两个代码通过查看页面源码的内容:
<form action="/ognl/user/LoginAction.action" method="post"> 用户名 <input type="text" name="username"/><br/> 密 码 <input type="password" name="password"/><br/> <input type="submit" value="登录"/> </form> <hr/> <form id="LoginAction" name="LoginAction" action="/ognl/user/LoginAction.action" method="post"> <table class="wwFormTable"> <tr> <td class="tdLabel"><label for="LoginAction_username" class="label">用户名:</label></td> <td ><input type="text" name="username" value="" id="LoginAction_username"/></td> </tr> <tr> <td class="tdLabel"><label for="LoginAction_password" class="label">密 码:</label></td> <td ><input type="password" name="password" id="LoginAction_password"/></td> </tr> <tr> <td colspan="2"><div align="right"><input type="submit" id="LoginAction_0" value="登录"/> </div></td> </tr> </table></form>
- 通过上面可以看出:
- <s:form/>
- 通过action和namespace两部分来指定请求路径,action直接给struts.xml配置文件中<action/>元素的name值即可,无需加后缀名。
- method默认为post。
- 会自动添加id属性,值与action的属性值相同。
- 真个表单生成在table中。
- <s:textfield/>
- 对应<input type="text"/>标签。
- 通过lable来生成<lable/>标签。
- <s:password/>
- 对应<input type="password"/>标签。
- 通过lable来生成<lable/>标签。
- <s:submit/>
- 对于<input type="submit"/>标签。
- <s:form/>
Struts2表单标签主题:
- 我们发现,整个表单都会在<table/>中生成,这也就说明无需每个为每个表单项中添加<br/>。因为在表格中无需再换行。
- 生成的表格中因为<s:form/>标签的theme属性的默认值为xhtml,它表示一种样式。这个主题样式由Freemarker模板完成。如果你不希望使用这个xhtml主题,那么有下列三种方法来修改主题:
- <s:textfield/>的theme属性指定为simple,那么这个表单项就使用简单主题。
- 在<s:form/>的theme属性指定为simple,那么这个表单都使用简单主题。
- 设置struts.ui.theme常量为simple,那么所有的表单的默认主题都为simple。在struts.xml文件中配置。
- 当表单设置为theme="simple"后:
<s:form action="LoginAction" namespace="/user" theme="simple"> <s:textfield name="username" label="用户名" /> <s:password name="password" label="密 码" /> <s:submit value="登录" /> </s:form>
- 源码的形式:
这时没有表格来格式化表单,而且也不能生成<lable>,这说明样式都要自来来设定。好处是你重新获得了自由,坏处是一切都要靠自己了。<form id="LoginAction" name="LoginAction" action="/ognl/user/LoginAction.action" method="post"> <input type="text" name="username" value="" id="LoginAction_username"/> <input type="password" name="password" id="LoginAction_password"/> <input type="submit" id="LoginAction_0" value="登录"/> </form>
- 自动回显功能:
- 我们知道,当表单提交后,在返回到表单页面时,HTML标签不可能帮我们回显数据。而struts2的表单标签可以做到这一点。原因是当前Action的值就在栈顶,而表单会从值栈中获数据回显。
表单标签之选择性标签:
- <s:radio/>标签的使用:
- 表单标签中简化比较大的标签可以不再写循环了,还可以自动回显。我们都知道在下拉表,单选,复选中,手动回显是比较麻烦的事。但是使用struts2标签后就方便很多。<s:radio list="#{'male':'男','female':'女'}" name="gender"/>这是一个map集合的表示。
- List集合的表示如下:<s:radio list="{'男','女'}" name="gender"/>这时候显示值和实际值相同。
- 表单标签中简化比较大的标签可以不再写循环了,还可以自动回显。我们都知道在下拉表,单选,复选中,手动回显是比较麻烦的事。但是使用struts2标签后就方便很多。<s:radio list="#{'male':'男','female':'女'}" name="gender"/>这是一个map集合的表示。
- <s:checkboxlist/>标签的使用:
- 这个东西也非常的好用,以下能显示很多复选框。而且能自动回显。示例如下:<s:checkboxlist list="{'看电影', '旅游', '健身', '购物', '睡觉', '读书'}" name="hobby" value="hobby.split(',\\\\s*')"/> value="hobby.split(',\\\\s*')"/>。后面的value的值是使用切割的技术实现回显。
- <s:select>标签的使用:
- 下拉列表与上面标签也一样,都是选择性的。使用它们无需循环。如下:<s:select name="city" list="#{'bj':'北京','sh':'上海','gz':'广州'}"/>
- 下拉列表与上面标签也一样,都是选择性的。使用它们无需循环。如下:<s:select name="city" list="#{'bj':'北京','sh':'上海','gz':'广州'}"/>
- 这里只介绍了常用的标签和标签的属性,当然上面的标都有其他的参数来实现更加复杂的逻辑处理,具体可以参考上面给出的文档。