02struts2值栈与标签
struts2

—高级软件人才实作培训专家! 高级软件人才实作培训专家!
搭建Struts2开发环境
搭建Struts2环境时,我们一般需要做以下几个步骤的工作: 1》找到开发Struts2应用需要使用到的jar文件. 2》编写Struts2的配置文件 3》在web.xml中加入Struts2 MVC框架启动配置
北京传智播客教育
北京传智播客教育
—高级软件人才实作培训专家! 高级软件人才实作培训专家!
搭建Struts2开发环境--Struts2在web中的启动配置
在struts1.x中, struts框架是通过Servlet启动的.在struts2中, struts框架是通过Filter启动的.他在web.xml中的配置如下:
—高级软件人才实作培训专家! 高级软件人才实作培训专家!
Struts2
讲师: 讲师:黎活明
北京传智播客教育
—高级软件人才实作培训专家! 高级软件人才实作培训专家!
Struts2
Struts2是在WebWork2基础发展而来的.和struts1一样, Struts2也属于MVC框架. 不过有一点大家需要注意的是:尽管Struts2和struts1在名字上的差别不是很大,但 Struts2和struts1在代码编写风格上几乎是不一样的.那么既然有了struts1,为何还要 推出struts2.主要是因为struts2有以下优点:
北京传智播客教育
—高级软件人才实作培训专家! 高级软件人才实作培训专家!
第一个Struts2应用--HelloWorld
在默认的配置文件struts.xml 中加入如下配置:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "/dtds/struts-2.0.dtd"> <struts> <package name="itcast" namespace="/test" extends="struts-default"> <action name="helloworld" class="cn.itcast.action.HelloWorldAction" method="execute" > <result name="success">/WEB-INF/page/hello.jsp</result> </action> </package> </struts>
Struts2.0$+#+% 的区别

04 Struts2-TagsStruts2标签目录1、通用标签a)Propertyb)Seti.默认为action scope,会将值放入request和ActionContext中ii.page/request/session/applicationc)beand)include对中文文件支持的问题,不建议使用,如需要包含,改用jsp包含e)paramf)debug2、控制标签a)If elseif elseb)Iteratori.collections map enumerateon iterator arrayc)subset3、UI标签a)Themei.Simple xhtml(默认) css_xhtml ajax4、AJAX标签a)补充5、$ # % 的区别a)$ 用于i18n和Struts配置文件b)# 取得ActionContext的值c)% 将原本的文本属性解析为ognl,对于本来就是ognl的属性不起作用i.参考<s:property>和<s:include>一、property标签格式:<s:property value=””default=”” escape=”true|false”/> 如果value中的内容为object,则Struts2都会把它解析成ognl表达式如果里面需要表示为字符串,则需要将内容用单引号括起来1、利用ognl表达式取值(例如:取值堆栈中的username值)<s:property value="username"/>2、取值为字符串需要将内容用单引号括起来<s:property value="’username’"/>3、设置默认值-default如果一个对象值取不到,则可以使用default设置一个默认值。
<s:property value="admin" default=”管理员”/>4、设定HTML-escape是否设置返回值为HTML原代码样式true:解析返回值的html代码false:原封不动返回值<s:property value="'<hr/>'" escape="false"/>二、set标签注:var 用于设定变量名value 变量值(可以是ognl表达式),也可以是字符串scope 就是的作用范围 request session page application action(默认)<li>set 设定adminName值(默认为request 和 ActionContext): <s:setvar="adminName"value="username"/></li><li>set 从request取值: <s:property value="#request.adminName"/></li> <li>set 从ActionContext取值: <s:property value="#adminName"/></li><%--<li>set 设定范围: <s:set name="adminPassword" value="password" scope="page"/></li><li>set 从相应范围取值:<%=pageContext.getAttribute("adminPassword") %></li>--%><li>set 设定var,范围为ActionContext: <s:set var="adminPassword"value="password"scope="session"/></li><li>set 使用#取值: <s:property value="#adminPassword"/></li><li>set 从相应范围取值: <s:property value="#session.adminPassword"/> </li>三、bean标签定义bean,并使用param来设定新的属性值<s:bean name="com.bjsxt.struts2.tags.Dog"><s:param name="name"value="'pp'"></s:param> </s:bean>定义bean,并使用一个变量(var)来接受创建的这个bean,取出值来<s:bean name="com.bjsxt.struts2.tags.Dog"var="myDog"><s:param name="name"value="'oudy'"></s:param> </s:bean>拿出值:因为在actionContext中,所以使用#<s:property value="#"/>当<s:bean>不指定var时,则对象相关属性会在值栈中。
02-Struts2的工作流程及配置文件

Struts2的工作流程及配置文件--- ---Struts2.0的流程图从图中看到Struts2的工作流程如下:1.服务器接收到的请求首先经过一组过滤器链(实际中的其他过滤器可能还包括诸如Spring 的字符过滤器CharactorEncodingFilter、V elocity的过滤器等,一般FilterDispatcher位于过滤器的最后一个执行),过滤器链按照你在web.xml中的配置顺序在接收客户请求时顺序执行,在向客户发送响应时反序执行,Struts2的核心FilterDispatcher在web.xml中的配置如下:<filter><filter-name>setCharactor</filter-name><!-- 配置字符过滤--><filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class><init-param><param-name>encoding</param-name><param-value>UTF-8</param-value></init-param></filter><filter><filter-name>struts2</filter-name><!-- 配置Struts2过滤器--><filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class> </filter><filter-mapping><filter-name>setCharactor</filter-name><url-pattern>/*</url-pattern></filter-mapping><filter-mapping><filter-name>struts2</filter-name><url-pattern>/*</url-pattern></filter-mapping>注意:如果你使用的是W ebLogic6.1作为应用服务器,需要使用FilterDispatcherCompatW eblogic61替代FilterDispatcher。
Strut2开发经验总结

Strut2开发经验总结1、如何在html静态页⾯中使⽤strutstomcat⽬录/conf/web.xml ⽂件中,找到<servlet-mapping><servlet-name>jsp</servlet-name><url-pattern>*.jsp</url-pattern></servlet-mapping><servlet-mapping><servlet-name>jsp</servlet-name><url-pattern>*.jspx</url-pattern></servlet-mapping>在其下⾯加⼊:<servlet-mapping><servlet-name>jsp</servlet-name><url-pattern>*.html</url-pattern></servlet-mapping>这样tomcat就会把后缀名为html的⽂件当成jsp来解析。
2、Struts2通⽤标签Struts2框架为我们提供了很多标签,这些标签总体上可以分为两类:通⽤标签和UI标签。
⽽较常使⽤的⼜是通⽤标签,所以⽂章的内容也是围绕通⽤标签展开的。
通⽤标签分为两类:数据标签和控制标签。
数据标签⽤于访问值栈中数据,控制标签⽤于控制呈现页⾯时数据执⾏流程。
如果需要使⽤Struts 2框架的标签库,需要在页⾯的⾸部引⼊以下代码:<%@ taglib uri="/struts-tags" prefix="s"%>下⾯将分别对这两种标签进⾏说明。
数据标签数据标签主要⽤于访问ActionContext和值栈中数据,数据标签包括:propertysetpushparambeanactionincludeurlai18ntextdatedebug1、property标签property标签⽤于输出值栈中对象的属性值,value属性就是要输出的值。
struts2标签详解[1]
![struts2标签详解[1]](https://img.taocdn.com/s3/m/4432e174f46527d3240ce0e5.png)
要在jsp中使用Struts2的标志,先要指明标志的引入。
通过jsp的代码的顶部加入以下的代码:<%@taglib prefix="s" uri="/struts-tags" %>If elseif else描述:执行基本的条件流转。
参数:例子:<s:set name="age" value="61"/><s:if test="${age > 60}">老年人</s:if><s:elseif test="${age > 35}">中年人</s:elseif><s:elseif test="${age > 15}" id="wawa">青年人</s:elseif><s:else>少年</s:else><s:set name="name" value="<%="'"+request.getParameter("name")+"'"%>"/><%System.out.println(request.getParameter("name"));%><s:if test="#name=='zhaosoft'">zhaosoft here</s:if><s:elseif test="#name=='zxl'">zxl here</s:elseif><s:else>other is here</s:else>Iterator(迭代)描述:用于遍历集合(java.util.Collection)或枚举值(java.util.iterator) 参数I18n(国际化操作)描述:加载资源包到值堆栈。
struts2_Tags

Struts2___Tags主要包括:Generic Tags(通用标签)Data TagsControl TagsUI Tags(UI标签)Form TagsNon-from TagsAjax TagsData Tags:property标签用于输出OGNL表达式的值ername:<s:property value="ername"/>username:<s:property value="username"default="没有找到对应属性时的默认值"/>字符串值:<s:property value="'username'"/>设置HTML标记:<s:property value="'<hr/>'" escapeHtml="false"/>◆set标签赋值给指定范围的变量var 指定变量名value 变量值scope 指定范围application, session, request, page, action(默认)<!-- 将OGNL表达式ername的值保存默认范围名为yourname的变量中,默认action范围即ActionContext--><s:set var="yourname"value="ername"/><h3>从action上下文中取出yourname</h3><s:property value="#yourname"/><br><h3>从请求范围中取出yourname</h3><s:property value="#request.yourname"/>◆bean标签用来创建JavaBean,放置到值栈的顶部或ActionContext中name属性必须指定javaBean的全路径类名var属性设置保存在ActionContext中的名称param标签为JavaBean的属性赋值<h3>没有指定var属性,bean标签创建的UserVO对象被放到值栈的顶部,标签结束从栈顶删除</h3> <s:set var="exp" value="'bean标签的使用'"socpe=”session”/><s:bean name="erVO"><s:param name="username"value="%{'张老三'}"/><s:param name="address"value="%{addr}"/><s:param name="explain"value="%{#session.exp}"/>用户名:<s:property value="username"/><br>地址:<s:property value="address"/><br>说明:<s:property value="explain"/><br></s:bean>用户名:<s:property value="username"/> <!-- UserVO对象已从栈顶删除,输出为空-->地址:<s:property value="address"/><h3>指定了var属性,bean标签创建的UserVO对象被放到值栈的顶部和ActionContext中</h3> <s:bean name="erVO"var="user"><s:param name="username"value="'张老三'"/><s:param name="email">zhangsan@</s:param>用户名:<s:property value="username"/><br>邮箱:<s:property value="email"/></s:bean><!-- 访问保存到ActionContext中的user对象-->用户名:<s:property value="#ername"/><!-- 可以输出userVO的username -->邮箱:<s:property value="#user.email"/>url标签: 用于生成url字符串%{}用法表示OGNL解析{}中字符串%{}能够解析这个字符串指定的变量或方法(在大多数标签中可以使用)即把此字符串当成OGNL表达式解析<s:set name="likes"value="#{'one':'football', 'two':'sleep'}" /><s:url value="%{#likes['one']}"/>|<s:url value="#likes['one']"/><h3>使用当前页面的URL生成的URL</h3><a href="<s:url/>">GO</a><hr/><h3>使用namespace和action属性的值生成的url</h3><s:set var="tagUrl"value="'tags_data_url.action'"/><s:url action="%{#tagUrl}"namespace="/tags"/><br/><a href="<s:url action='tags_data_url'namespace='/tags'/>">to action </a> <s:property value="#request.welcome"/><hr/><h3>使用forceAddSchemeHostAndPort属性强制添加scheme、主机和端口</h3><s:url value="/ch5/data/tags_url.jsp"forceAddSchemeHostAndPort="true"/><br/><a href='<s:url value="/ch5/data/tags_url.jsp"forceAddSchemeHostAndPort="true"/>'>to tags_url.jsp</a><hr/><h3>使用嵌套的param标签附加请求参数<br><s:url value="tags_data_url.action"><s:param name="id"value="888"/><s:param name="page"value="1"/></s:url></h3><h3>使用var属性和escapeAmp属性,在url标签结束后使用property标签输出生成的URL</h3><!-- 使用var属性url不会输出被保存到OgnlContext中escapeAmp属性指定&是否替换&符号<s:url value="tags_data_url.action"var="urlTag"escapeAmp="true"><s:param name="id"value="888"/><s:param name="page"value="1"/></s:url><s:property value="#urlTag"/>action标签: 用于在jsp页面直接调用actionname action的名称executeResult 是否执行action的Result 并将result页面包含在本页面<h3>不执行结果,调用tags_action的doShow()方法,获取请求对象中的welcome属性</h3> <s:action name="tags_action.action!show"executeResult="false"namespace="/tags"/><s:property value="#request.welcome"/><!-- 获取请求对象中的welcome属性--><h3>执行结果,并通过嵌套的param标签,设置action的ername和email属性</h3> <s:action name="tags_action!display"executeResult="true"namespace="/tags"><s:param name="ername"value="'张老三'"/><s:param name="userVO.email"value="'zhangsan@'"/></s:action>Control Tagss:if s:else s:elseif 用于条件判断<s:if test="#parameters.ids[0]!=null">id!=null</s:if><s:else>id==null</s:else>性别:<s:if test='%{userVO.sex=="M"}'>男</s:if><s:else>女</s:else>您属于:<s:if test="userVO.age < 30">青年</s:if><s:elseif test="userVO.age >= 30 && userVO.age < 50">中年</s:elseif> <s:else>老年</s:else>iterator标签用于迭代Collection、数组、Map、Enumeration、Iteratorvalue属性可以自定义变量值,也可以使用OGNL表达式取action上下文中的变量<h3>迭代列表,不使用status属性</h3><s:iterator value="{'张老三', '张小三', '张老二'}"><s:property/>|</s:iterator><h3>迭代列表,使用status属性</h3><table border="1"height="300"width="900"><th>当前元素</th><th>当前迭代的元素的总数</th><th>当前迭代的元素的索引</th><th>当前迭代的元素是否是偶数</th><th>当前迭代的元素是否是奇数</th><th>当前迭代的元素是否是第一个元素</th><th>当前迭代的元素是否是最后一个元素</th></tr><s:iterator value="{'张老三', '张小三', '张老二'}"status="status"> <tr><td><s:property/></td><td><s:property value="#status.count"/></td><td><s:property value="#status.index"/></td><td><s:property value="#status.even"/></td><td><s:property value="#status.odd"/></td><td><s:property value="#status.first"/></td></tr></s:iterator></table><h3>迭代Map,不使用status属性</h3><s:iterator value="#{'first':'张老三', 'second':'张小三', 'third':'张老二'}"> <s:property value="key"/>:<s:property value="value"/><br> </s:iterator>generator标签: 用于按指定分隔符,拆分字符串为迭代器<h3>使用generator标签拆分一个字符串,生成迭代器对拆分后的子串进行迭代</h3><s:generator val="userVO.likes[0]"separator=","><s:iterator><s:property/><br></s:iterator></s:generator><h3>使用count属性指定在生成的迭代器中可用的元素数量</h3><!-- 由于count属性设置为2,因此生成的迭代器中只有2个元素可用--><s:generator separator=","val="userVO.likes[0]"count="2"> <s:iterator><s:property/><br></s:iterator></s:generator><h3>使用var属性,将生成的迭代器保存到pageContext对象中</h3><s:generator separator=";"val="'张老三; 张小三; 张老二'"var="names"/> <s:iterator value="#names"><s:property/><br></s:iterator>sort标签:对一个列表进行排序<!--定义比较器--><s:bean name="org.struts2.util.StringComparator"var="myComparator"/><s:sort source="users"comparator="#myComparator"><s:iterator><s:property/><br/></s:iterator></s:sort>模板template和主题 theme模板template定义了标签上的显示风格的模板文件,如:form.ftl submit.ftl通常使用jsp、 Velocity、FreeMarker编写主题 theme一系列具有共同外观的 template组织在一起形成一个主题Struts2内置了4种主题1.simple2.xhtml(默认) 可以通过constant覆盖原来的默认值如:<constant name="struts.ui.theme" value="simple" /> 3.css_xhtml4.ajaxstruts2 的UI标签都是基于主题和模板对于struts2 theme(主题) 一般建议设为simple自己通过css来控制页面显示样式<s:head />用于输出对应主题的JavaScript、CSS<%-- 以下是xhtml主题下form的显示--%><s:head theme="xhtml"/><style type="text/css"><%-- 通过样式覆盖原来xhtml主题生成的table样式需要查看页面源码获取样式名称--%>.wwFormTable {border:black 1px dotted;}</style></head><body><s:form action="tags_theme"theme="xhtml"namespace="/tags"><s:textfield name="username"label="用户名"required="true"/><s:submit/></s:form></body>Form Tags:<s:form action="tags_form"theme="xhtml"method="post"namespace="/tags"><s:hidden name="erId"/><s:textfield name="ername"label="用户名"required="true"/><s:password name="userVO.password"label="密码"required="true"/><s:password name="userVO.confirmPwd"label="重复密码"required="true"/><s:textfield name="userVO.age"label="年龄"/><s:textfield name="userVO.email"label="Email"/><s:textfield name="userVO.birthday"label="生日"/><s:radio name="userVO.sex"label="性别"list="#{'M':'男','F':'女'}" /><s:checkboxlist name="userVO.likes"label="爱好"list='{"踢球","吃饭","编程","睡觉"}'/><s:select name="cation"label="学历"headerKey="-1"headerValue="--------请选择学历--------"list='{"高中","大学","硕士","大专"}'/><s:combobox name="userVO.position"label="职位"list='{"工程师","项目经理","技术总监","技术支持"}'headerValue="--------请选择职位--------"headerKey="-1"/><s:select list="categories"name="userVO.categoryId"label="版块"listKey="categoryId"listValue="categoryName"headerKey="-1" headerValue="--------请版块--------"/><s:textarea name="userVO.explain"label="个人说明"cols="30"rows="8"/><tr><%--submit标签说明:可以通过method属性指定提交的方法名也可以通过name属性指定前缀:方法名的形式来指定提交的action或方法来覆盖form中的action属性值--%><td align="right"><s:submit value="submit"theme="simple"/><s:submit value="show"theme="simple"name="method:showUserInfo"/> </td><td><s:submit value="save"theme="simple"method="saveUser"/><s:submit value="other_action"theme="simple"name="redirect:tags_other"/><s:reset value="重置"theme="simple"/></td></tr></s:form>以上示例参见ch5。
第15章struts2标签讲解
Struts标签:1.通用标签:(1)property(2)bean(3)param(4)debug2.控制标签:(1)if elseif else(2)iterator一、property标签类似于上节课的例子,1.在WebRoot下新建一个index_tags.jsp:<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><%String path = request.getContextPath();String basePath =request.getScheme()+"://"+request.getServerName()+":"+req uest.getServerPort()+path+"/";%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01Transitional//EN"><html><head><title>My JSP 'index.jsp' starting page</title></head><body>访问属性:<ahref="http://localhost:8080/ch2_example1/test/tags.action ?username=aaa&password=bbb">tags</a></body></html>2.新建一个my.tags.TagsAction:package my.tags;import com.opensymphony.xwork2.ActionSupport;public class TagsAction extends ActionSupport{private String username;private String password;public String execute(){this.addFieldError("fielderror.test", "wrong!");return SUCCESS;}public String getUsername() {return username;}public void setUsername(String username) {ername = username;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}}3.修改struts.xml:<package name="mypack" namespace="/test"extends="struts-default"><action name="tags" class="my.tags.TagsAction" method="execute"><result name="success">/WEB-INF/page/tags.jsp</result></action></package>4.在WEB-INF/page下新建tags.jsp:<%@ 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 'tags.jsp' starting page</title></head><body><ol><li>property:<s:property value="username"/></li><li>property赋值为字符串:<s:propertyvalue="'username'"/></li><li>property设为默认值:<s:property value="admin" default="管理员"/></li><li>property设定HTML:<s:property value="'<hr/>'"escape="true"/></li></ol></body></html>测试:在地址栏输入:http://localhost:8080/ch2_example1/index_tags.jsp点击超链接tags得到下面的结果:1.property:aaa2.property赋值为字符串:username3.property设为默认值:管理员4.property设定HTML:<hr/>解释:<li>property:<s:property value="username"/></li>这个用法上节课已经讲过,不解释了。
轻松学Java Web开发之Struts 2标签库
13.4.3 datetimepicker标签
datetimepicker标签用来生成一个文本框和日期、时 间选择器的组合。在选择器中选择完某个日期或者 时间时,会自动将被选择的日期或者时间输入文本 框中。datetimepicker标签包括的常用属性如表13.10 所示。
第13章 Struts 2标签库
Struts 2同Struts 1一样,为页面开发提供了大量的标 签,但是相比而言Struts 2的标签库更为强大。因为 Struts 2不仅整合了Dojo技术,能够生成大量的页面 效果,而且它支持OGNL表达式,不再依赖任何表现 层技术。借助于Struts 2标签来开发页面,可以使页 面更加整洁而且容易维护,同样可以减少代码量以 及开发时间。
13.1 Struts 2标签库概述
通过上面的配置就可以在JSP页面中使用Struts 2提供 的标签了。使用Struts 2标签的语法格式分为两种, 如图13.3所示。
没有标签体: <s:标签名 属性1=属性值1 <s:标签名 属性1=属性值1 </s:标签名> 属性2=属性值2 ……/> 属性2=属性值2 ……>
属性名 displayFormat displayWeeks endDate formatLength label name startDate type value 必选 否 否 否 否 否 否 否 否 否 默认值 无 6 2941-10-12 short 无 无 1492-10-12 date 无 属性值类型 String Integer Date String String String Date String String 说明 指定日期显示格式 指定显示的星期数 指定最后的日期 指定日期格式 指定日期选择器前显示文本 指定日期选择器名称 指定最开始日期 指定日期选择类型 指定默认初始化时间
Struts2 标签库 UI标签的使用
Struts2 标签库UI标签的使用Struts2中一共定义了4个主题,分别是simple、xhtml(默认)、css_xhtml、ajax。
以下拉列表和移动列表框为例,移动列表框就类似于QQ中选择某些好友上线提醒一样。
1 <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>2 <%@ taglib prefix="s" uri="/struts-tags"%>34<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">5<html>6<head>7<title>uitest.jsp 下拉列表示例</title>8</head>9<body bgcolor="#bb99cc">10<h3>使用s:optiontransferselect 来生成可移动列表项的下拉列表框</h3>11<s:form>12<!--使用简单集合对象来生成可移动的下拉列表框-->13<s:optiontransferselect14list="{'苹果','梨','菠萝','香蕉','橙子','草莓','西红柿','西瓜','葡萄','荔枝'}"15label="选择你喜欢的水果"16name="cnfruit"17leftTitle="水果"18rightTitle="已选择"19multiple="true"20addAllToLeftLabel="取消选择"21selectAllLabel="全部选中"22addAllToRightLabel="选择全部"23addToLeftLabel="<<--"24addToRightLabel="-->>"25headerKey="cnKey"26headerValue="---选择你喜欢的水果---"27emptyOption="true"28doubleList="{'hello'}"29doubleName="enfruit"30doubleHeaderKey="enKey"31doubleHeaderValue="---已选择---"32doubleEmptyOption="true"33doubleMultiple="true">34</s:optiontransferselect>35</s:form>36<br><hr>37<s:form>38<h3>下拉列表示例</h3>39<s:combobox40list="{'语文','数学','英语','政治'}" 41theme="css_xhtml"42labelposition="right"43label="选择科目"44size="20"45maxlength="20"46name="class"47emptyOption="true"48value="请选择">49</s:combobox>50</s:form>51</body>52</html>效果如图:分类: JavaWeb标签: Struts2 标签库UI标签的使用。
第七章 MVC框架技术Struts2
本章要点
Struts2配置及应用程序原理 Action的设计方法与结果类型 服务器端的输入验证 Struts2国际化、标签库和OGNL表达式 拦截器、文件上传和下载
7.1 Struts2概述
Struts框架的历史
• Struts在经历了1.x的若干版本后,最终发展 到2.0版本,也就是我们常说的Struts2。它是 Struts和WebWork相互结合的产物,代表了 WEB框架的最新技术和规范。本书中Struts2 的内容以最新的Struts2.2.3版本为准。
7.3 输入验证
使用validate()方法
• 要进行输入验证,Action类要继承ActionSupport,并重写 validate()方法。 • 当请求Action的时候,请求中的参数会自动去填充Action的模型 中的同名属性,如果能够从字符串自动转换成相应的Java数据类 型,则转换成功,否则会抛出异常。如果类型转换成功,则填充 属性,并在调用业务方法前,执行validate()方法来判断所有输 入数据的合法性,例如长度是否够,是否是空值等。 • 输入验证可以针对不同的业务方法,例如,对登录进行输入验证, vaidate()方法可以命名成validateLogin()。如果同时有 validate()方法,执行的顺序是先调用validateLogin(),再调用 validate(),前面的方法验证没通过,后面的方法不再执行。
此外,还有SessionAware、ServletResponseAware、 ServletRequestAware、ParameterAware等接口。
多方法的Action
• 前面所定义的Action都是通过execute()方法处理请求。在实际 的应用中,如果为每个业务逻辑定义一个Action,虽然实现方便, 但是Action数量多,struts.xml中需要配置的内容也多,使系统 非常庞杂。实际上,可以用一个Action处理多个业务请求。 • 以YbUserAction为例,可以为每个操作定义一个方法,这些方法 的格式和execute()方法一样。