首页 > 代码库 > struts标签
struts标签
本节内容
- 了解Struts2标签库的组成
- 掌握表单标签的使用
- 了解非表单标签的使用
- 掌握数据标签的使用
- 掌握控制标签的使用
一、Struts2标签库概述
- 使用标签的优势:
- 使用简单
- 可维护性强(避免使用Java代码)
- 复用性高
- 标签库分类
(UI:user Interface ; Ajax:asynchronous JavaScript and xml)
- UI标签:主要用于生产HTML元素的标签
- 表单标签:主要用于生产HTML页面的form元素以及普通表单元素的标签
- 非表单标签:主要用于生产页面上的树、Tab等标签
- 非UI标签:主要用于数据访问、逻辑控制等的标签
- 流程控制标签
- 数据访问标签
- Ajax标签:用于Ajax支持的标签
- 导入Struts标签库
在JSP页面中使用Struts2标签库中提供的标签,必须使用taglib指令导入Struts2标签库
<%@taglib prefix="s" uri="/struts-tags"%>
a) prefix属性指定标签的前缀,此处指定标签的前缀为“s”,即使用Struts2标签库中的任一标签时,前面都应加上“s:”,例如“<s:property>”
b) uri属性指定标签库描述文件的路径,此处设为“/struts-tags”,与struts-tags.tld文件中的默认uri一致
二、表单标签
Struts2提供了很多表单标签,大部分表单标签和HTML表单元素之间一一对应 。
表单标签将在 HTML 文档里被呈现为一个表单元素,标签的属性值可以被赋值为一个静态的值或一个 OGNL 表达式.
使用表单标签的 :
优点: 表单回显
缺点:对页面进行布局和排版
演示常见表单标签用法:
案例
Login.jsp
<s:form action="log" method ="post"> <s:checkboxlist name="a" label="请选择您喜欢的图书" list="{‘spring2.0‘,‘j2ee‘,‘ajax‘}"/> <s:radio name="b" label="请选择您喜欢的图书" list="{‘spring2.0‘,‘j2ee‘,‘ajax‘}"/> <s:select name="c" label="请选择您喜欢的图书" list="{‘spring2.0‘,‘j2ee‘,‘ajax‘}"/> <s:textfield name="uname" label="登录ID" maxlength="6" size="90px"/> <s:password name="upass" label="登录密码" maxlength="6" size="90px"/> <s:submit value=http://www.mamicode.com/"login"/> <s:reset value=http://www.mamicode.com/"reset"/> <s:token/> </s:form> |
Struts2.xml
<package name="struts2" extends="struts-default"> <action name="log" class="com.inspur.action.LoginAction"> <result name="success">/login.jsp</result> <result name="error">/login.jsp</result> </action> </package> |
LoginAction.java
public class LoginAction { private String uname; private String upass; private String a; private String b; private String c; get/set…… public String execute(){ System.out.println(a); System.out.println(b); System.out.println(c); if("ross".equals(this.uname) && "111".equals(this.upass)){ return "success"; }else{ return "error"; } } }
|
三、非表单标签
非表单标签主要用于在页面中生成非表单的可视化元素,主要有:a、actionerror、actionmessage、component、div、fielderror、tabbedPanel、tree、treenode。
- S:fielderror标签
作用:完成界面上的数据的校验,如果校验出错,则生成错误消息,然后迁移到错误输出界面上,用S:fielderror标签显示错误信息。
工作流程:界面上发出请求给loginaction组件,先将界面上的数据封装到action对应的属性上,检测如果程序员重写了validate(),进行校验,如果校验通过则将请求转到execute()上处理请求,如果校验不通过,则迁移到input指定的错误输出界面。
错误消息显示:
<s:fielderror/>显示所有校验错误信息;
<s:fielderror fieldName="uname"/>显示某个校验信息;
案例:登录校验
Login.jsp
<body> <font color="red"><s:fielderror/></font> <form action="log.action"> <table align="center"> <tr><td>用户名:<input type="text" name="uname"></td> <td><font color="red"><s:fielderror fieldName="uname"/></font></td></tr> <tr><td>密 码:<input type="password" name="upass"></td> <td><font color="red"><s:fielderror fieldName="upass"/></font></td></tr> <tr><td><input type="submit" value=http://www.mamicode.com/"登录"></td></tr> </table> </form> </body> |
在loginAction.java的属性设置之后和调用方法之前进行验证,一般只重写ActionSupport中的validate方法即可
@Override public void validate() { // 登录ID非空校验 if("".equals(uname)){ this.addFieldError("uname", "登录名为空"); } // 登录密码非空校验 if("".equals(upass)){ this.addFieldError("upass", "登录密码为空"); }else if(upass.length()<6 || upass.length()>12){ this.addFieldError("upass", "登录密码长度必须在6到12之间"); } } |
Struts.xml:书写input返回结果页面
<package name="struts2" extends="struts-default"> <action name="log" class="com.inspur.action.LoginAction"> <result name="success">/login.jsp</result> <result name="error">/login.jsp</result> <result name="input">/login.jsp</result> </action> </package> |
四、数据标签
数据标签主要用来提供各种数据访问功能
标签名 |
描述 |
action |
该标签用来直接调用一个Action,根据executeResult参数,可以将该Action的处理结果包含到页面中 |
bean |
该标签用来创建一个JavaBean对象 |
date |
该标签用来格式化输出一个日期属性 |
debug |
该标签用来生成一个调试链接,当点击该链接时,可以看到当前值栈中的内容 |
i18n |
该标签用来指定国际化资源文件的baseName |
include |
该标签用来包含其他的页面资源 |
param |
该标签用来设置参数 |
property |
该标签用来输出某个值,该值可以是值栈或ActionContext中的值 |
set |
该标签用来设置一个新的变量,并把新变量存储到特定的范围中 |
text |
该标签用来输出国际化信息 |
url |
该标签用来生成一个特定的URL |
- 1. property标签
property标签的作用是输出指定值
输出value属性指定的值,如果没有指定value属性,则默认输出ValueStack栈顶的值
属性名 |
是否必须 |
描述 |
default |
否 |
如果输出的属性值为null,则显示default属性指定的值 |
escape |
否 |
默认为true,即不解析HTML标签,如果设定为false则默认解析HTML标签 |
value |
否 |
指定需要输出的属性值,如果没有指定该属性,则默认输出ValueStack栈顶的值 |
iid |
否 |
指定该元素的标识 |
- 2. Bean标签
bean标签主要用于创建一个JavaBean的实例
属性名 |
是否必须 |
描述 |
name |
是 |
该属性指定要实例化的JavaBean实现类 |
var |
否 |
如果指定了该属性,则JavaBean实例就会放入ActionContext中,从而允许直接通过该var属性来访问该JavaBean实例。如果不指定var属性,JavaBean实例则被放置在值栈中 栈顶。 |
Bean示例
示例一: <s:bean name="com.haiersoft.ch04.model.Person"> <s:param name="name" value="http://www.mamicode.com/‘zhangsan‘" /> <s:param name="age" value="http://www.mamicode.com/18" /> 姓名为:<s:property value="http://www.mamicode.com/name"/><br/> 年龄为:<s:property value="http://www.mamicode.com/age"/> </s:bean> 示例二: <s:bean name="com.haiersoft.ch04.model.Person" var="p"> <s:param name="name" value="http://www.mamicode.com/‘zhangsan‘" /> <s:param name="age" value="http://www.mamicode.com/18" /> </s:bean> 姓名为:<s:property value="http://www.mamicode.com/#p.name" /><br /> 年龄为:<s:property value="http://www.mamicode.com/#p.age" /> |
- 3. Param标签
- param标签主要用于为其他标签提供参数 ,如bean
属性名 |
是否必须 |
描述 |
name |
否 |
指定被设置参数的参数名 |
value |
否 |
指定被设置参数的参数值,该值为Object类型 |
id |
否 |
指定引用该元素的ID |
示例(value="http://www.mamicode.com/zhangdan"将zhangdan作为OGNL表达式解析,如果想作为字符串解析加单引号): <s:param name="user">zhangsan</s:param> <s:param name="user" value="http://www.mamicode.com/‘zhangdan‘"/> <s:param name="user" value="http://www.mamicode.com/zhangdan"/> |
- 4. Set标签
- set标签主要用于将某个值放入指定的范围内
属性名 |
是否必须 |
描述 |
var |
否 |
设置变量的名称 |
scope |
否 |
用来指定变量的有效范围,该属性值可以是application、session、request、page或action。如果没有指定该属性,则默认将该变量放置在ActionContext中 |
value |
否 |
用来设置变量的值,如果没有指定该属性,则将ValueStack栈顶的值赋给该变量 |
id |
否 |
该属性指定该元素的应用ID(被var代替,已经过时) |
示例: <s:set name="p1" value="http://www.mamicode.com/#person" /> <s:set name="p1" value="http://www.mamicode.com/’person’" /> <s:set name="p2" value="http://www.mamicode.com/#person" scope="application" /> <s:set name="p3" value="http://www.mamicode.com/#person" scope="session" />
|
数据标签案例:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <%@taglib prefix="s" uri="/struts-tags"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>My JSP ‘dataTag.jsp‘ starting page</title> </head> <body> <form action=""> <!-- 设置value为字符串的时候需要加上单引号,否则会以OGNL表达式解析 --> <h4>bean标签</h4> <s:bean name="com.inspur.pojo.Person" var="person"> <s:param name="age" value=http://www.mamicode.com/"21"></s:param> <%-- <s:param name="pname" value="http://www.mamicode.com/‘zhangsan‘"></s:param>--%> <s:param name="pname" >zhangsan</s:param> </s:bean> <s:property value=http://www.mamicode.com/"#person.pname"/><br> <s:property value=http://www.mamicode.com/"#person.age"/><br><br> <!-- set标签:将value值设置到对应scope中的name属性中 --> <s:set name="p1" value=http://www.mamicode.com/"#person" /> <s:set name="p2" value=http://www.mamicode.com/"‘person‘" /> <s:set name="p3" value=http://www.mamicode.com/"#person.pname" scope="application" /> <s:set name="p4" value=http://www.mamicode.com/"#person.age" scope="session" /> <!-- 取对应范围的值 --> <s:property value=http://www.mamicode.com/"#p1"/> <br> <s:property value=http://www.mamicode.com/"#p2"/><br> <s:property value=http://www.mamicode.com/"#application.p3"/><br> <s:property value=http://www.mamicode.com/"#session.p4"/><br> <s:debug/> </form> </body> </html>
|
五、控制标签
控制标签主要用于完成流程控制,例如分支、循环等操作,也可以完成对集合的合并、排序等操作
标签名 |
描述 |
if |
该标签用于控制选择输出 |
elseIf/elseif |
该标签同if标签结合使用,用来控制选择输出 |
else |
该标签同if标签结合使用,用来控制选择输出 |
append |
该标签用于将多个集合拼接成一个集合 |
generator |
该标签是一个字符串解析器,用来将一个字符串解析成一个集合 |
iterator |
该标签是一个迭代器,用来迭代输出集合中的数据 |
merge |
该标签用于将多个集合拼接成一个集合,在使用方式上与append有区别 |
sort |
该标签用于对集合进行排序 |
subset |
该标签用于截取集合的部分集合,形成新的子集合 |
- 1. if/elseif/else标签
if、elseif、else这3个标签都用来进行分支控制。其中,if和elseif标签利用test属性的值来决定是否计算并输出标签体的内容
示例: <!-- 判断成绩是否及格,不及格,良,优 --> <s:set var="score" value="http://www.mamicode.com/99" /> <s:if test=“#score<60"> 成绩为:不及格 </s:if> <s:elseif test=“#score>=60 && #score<80}"> 成绩为:及格 </s:elseif> <s:elseif test=“#score>=80 && #score<90}"> 成绩为:良 </s:elseif> <s:else> 成绩为:优 </s:else> |
- 2. iterator标签
iterator标签主要用于对集合进行迭代,其中集合类型可以是List、Set、Map或数组
属性名 |
是否必须 |
描述 |
value |
否 |
指定迭代集合,通常使用OGNL表达式指定。如果没有指定value属性,则使用ValueStack栈顶的集合 |
var |
否 |
指定遍历出集合中元素的变量名 |
status |
否 |
指定迭代时的IteratorStatus实例,用于获取迭代状态 |
示例:
<table border=1 width=200> <s:iterator value="http://www.mamicode.com/{‘JavaSE程序设计教程‘, ‘JavaEE轻量级框架-S2SH‘, ‘JavaWeb程序设计‘}" var="bookName"> <tr> <td><s:property value=http://www.mamicode.com/“#bookName" /></td> </tr> </s:iterator> </table> |
程序案例:后台books和userList对象的生成省略
<!-- 遍历Map --> <s:iterator value=http://www.mamicode.com/"books" var="tt"> <td><s:property value=http://www.mamicode.com/"#tt.key" /></td> <td><s:property value=http://www.mamicode.com/"#tt.value" /></td><br> </s:iterator> <!-- 遍历List<User> --> <table> <s:iterator value=http://www.mamicode.com/"userList" var="tt1" status="sta"> <tr> <s:if test="#sta.index%2==0"> <td style="color: red"><s:property value=http://www.mamicode.com/"#tt1.userName" />:<s:property value=http://www.mamicode.com/"#tt1.age" /></td> </s:if> <s:else> <td style="color: green"><s:property value=http://www.mamicode.com/"#tt1.userName" />:<s:property value=http://www.mamicode.com/"#tt1.age" /></td> </s:else> </tr> </s:iterator> </table> |
struts标签