Struts2中Action从表单取值并且存到Web元素中(session).doc
《Struts2中Action从表单取值并且存到Web元素中(session).doc》由会员分享,可在线阅读,更多相关《Struts2中Action从表单取值并且存到Web元素中(session).doc(63页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、在struts2中,Action不同于struts1.x中的Action。在struts2中Action并不需要继承任何控制器类型或实现相应接口。比方struts1.x中的Action需要继承Action或者DispatcherAction。同时struts2中的Action并不需要借助于像struts1.x中的ActionForm获取表单的数据。可以直接通过与表单元素相同名称的数据成员需要存在符合命名标准的set和get方法获取页面表单数据。虽然struts2中的Action原那么上不用继承任何类型。但是一般需要实现com.opensymphony.xwork2.Action接口或者继承co
2、m.opensymphony.xwork2.ActionSupport类型,然后重写execute方法。通常更愿意去继承ActionSupport类型,这样我们可以在我们的控制器中增加更多的功能。因为ActionSupport本身不但实现了Action接口,而且实现了其他的几个接口,让我们的控制器的功能更加强大,例如:com.opensymphony.xwork2.Validateable:提供了validate方法,可以对action中的数据进行校验com.opensymphony.xwork2.ValidationAware:提供了addFieldError方法,可以存取action级别或
3、者字段级别的错误消息com.opensymphony.xwork2.TextProvider:提供了获取本地化信息文本的方法getTextcom.opensymphony.xwork2.LocaleProvider:提供了getLocale方法,用于获取本地信息从以上我们可以看到,继承ActionSupport,可以完成更多的工作。例如上面的例子,例如我们需要判断输入文本框的内容,输入的内容长度必须在6-10之间。那么我们可以增加校验工作,利用validate方法。更改后的代码如下:package com.frank.action;import com.opensymphony.xwork2.
4、ActionSupport;public class HelloWorldAction extends ActionSupport private String message; private String username; Override public String execute() throws Exception this.message=Hello World:+this.username; return SUCCESS; public String getUsername() return username; public void setUsername(String us
5、ername) this.username = username; public String getMessage() return message; public void setMessage(String message) this.message = message; Override public void validate() if(this.username.trim().length()10) addFieldError(user.username,the length is invalid); 由于实现了validate方法,这样当请求一个控制器在这里为helloWorld
6、.action的时候,首先执行validate方法,如果有错误信息增加到action中,那么就不继续执行Action,返回INPUT,否那么就继续执行Action。在本例中,首先判断用户名称是否在合法的长度范围,如果不在增加错误信息,返回INPUT默认返回。因为有错误返回INPUT,所以此Action在配置文件中应该定义INPUT转发路径 display.jsp helloWorld.jsp 出现错误时,返回到helloWorld.jsp,并在此页面中显示控制器中所注册的错误消息,更改后的页面如下黑色字体为增加的My JSP helloWorld.jsp starting page !- us
7、ername:当前Action执行的核心方法都是execute,有时我们可以能希望同一个控制器做不同的工作。例如在对一个表分别进行CRUD操作时,我们可能需要根据不同的情况执行4种操作,这样一个execute做起来比拟麻烦,我们可以定义我们自己的方法,然后控制器有选择的执行。类似struts1.x中的DispatcherAction控制器一样。这时我们自定义的操作方法,必须和execute具有相同的签名,只是名称不同而已。例如在前面的例子中我们增加一个超链接,让它同样请求helloWorld.action,但是在控制器端执行自己定义的方法myExecute。注意在这里先去掉验证方法valida
8、te,取消验证。修改后代码如下:package com.frank.action;import com.opensymphony.xwork2.ActionSupport;public class HelloWorldAction extends ActionSupport private String message; private String username; Override public String execute() throws Exception this.message=Hello World:+this.username; return SUCCESS; public
9、 String myExecute() throws Exception this.message=Good Morning !; return SUCCESS; public String getUsername() return username; public void setUsername(String username) this.username = username; public String getMessage() return message; public void setMessage(String message) this.message = message;
10、此时我们需要增加新的Action配置,并指明调用的方法 display.jsp 在helloWorld.jsp中增加超链接,强求新增加的ActionOtherAction新的请求页面:点击超链接后,请求新的Action,结果如下:由于请求的新Action在配置中指明了所调用的方法为myExecute,所以在控制器端不再执行execute方法,转而执行myExecute,所以输出结果为Good Morning !同样存在另外一种形式请求新的Action:即:Action名!新的方法名.action,刚刚的超链接可以更改成:OtherAction表单数据的提交表单数据的提交在Web编程中是非常重要
11、的。控制器需要获取用户在表示层页面所提交的数据,然后进行下一步操作。比方在用户登录操作中,控制器需要获取用户在页面中输入的“用户名称和“密码数据,来决定下一步的验证。获取表单提交的数据有两种方式:第一种为使用中介对象我通常把它称为包装表示层数据的包裹。比方在strtus1.x中使用各种ActionForm来封装页面数据。使用中介对象可以同时在中介对象的里面增加诸如:验证、过滤、日志记录等附加工作。但是同样带来了类数量的膨胀,存在各种各样的ActionForm类LoginForm、PersonForm等等,不利于工程的维护管理。第二种是直接使用控制器中的域对象,即直接使用控制器中的数据成员获取表
12、示层的数据,在struts2种支持此种方式。但必须保证相应的数据成员和表示层提交的数据名称一致,并且具有符合命名标准的setter和getter方法。这样可以到达“内省。直接使用域对象可以减少类的膨胀,如果只是简单的获取提交的数据那么建议直接使用域对象。在此我们还是同一个非常简单的我经常采用的登录操作来体会开发过程。可以通过此操作扩展到复杂的操作,其实原理一样。还是从头开始省去准备工作的步骤,直接进入开发过程:首先创立一个登录页面login.jsp,代码内容如下:My JSP login.jsp starting page !- User Login Username: Password: 用
13、于显示所注册的错误信息接着建立Actiion类:LoginAction,在此我们通过域对象获取表示层提交的数据,也就是在控制器中声明两个数据成员username和password来得到表示层的数据,然后在execute方法中进行验证工作当然,一般标准开发需要在业务类中进行实际验证,在此简便此操作。同时重写validate方法在Action实际执行前进行验证工作,具体的验证方式由自己的业务决定。代码如下:package com.frank.action;import com.opensymphony.xwork2.ActionSupport;public class LoginAction ex
14、tends ActionSupport private String username; private String password; Override public String execute() throws Exception if(this.username.equals(admin)&this.password.equals(admin) return SUCCESS; return INPUT; Override public void validate() if(this.username=null|this.username.trim().length()1) addFi
15、eldError(no.username,must input username); if(this.password=null|this.password.trim().length()1) addFieldError(no.password,must intpu password); public String getUsername() return username; public void setUsername(String username) this.username = username; public String getPassword() return password
16、; public void setPassword(String password) this.password = password; 新建一个index.jsp页面,用户在用户登录成功后显示,内容非常的简单,就是一条“Login Success!My JSP index.jsp starting page !-Login Success!现在可以开始配置Action了,在struts.xml中增加新的Action,配置如下: index.jsp login.jsp 可以部署和运行了,启动login.jsp如果在任意一个文本框中不输入内容或者输入空白内容,那么返回当前页面,并错误提示如果输入
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Struts2 Action 表单 并且 Web 元素 session
限制150内