您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 咨询培训 > Struts 2.1
1Struts2.0的Action讲解有Struts1.x经验的朋友都知道Action是Struts的核心内容,当然Struts2.0也不例外。不过,Struts1.x与Struts2.0的Action模型很大的区别。Struts1.xStuts2.0接口必须继承org.apache.struts.action.Action或者其子类无须继承任何类型或实现任何接口表单数据表单数据封装在FormBean中表单数据包含在Action中,通过Getter和Setter获取虽然,理论上Struts2.0的Action无须实现任何接口或继承任何类型,但是,我们为了方便实现Action,大多数情况下都会继承com.opensymphony.xwork2.ActionSupport类,并重载(Override)此类里的Stringexecute()方法。具体的实现,如例1所示:%@pagecontentType=text/html;charset=UTF-8%%@taglibprefix=suri=/struts-tags%htmlheadtitleHelloWorld!/title/headbodyh2s:propertyvalue=message//h2/body/html例1HelloWorld.jsppackagetutorial;importjava.text.DateFormat;importjava.util.Date;importcom.opensymphony.xwork2.ActionSupport;publicclassHelloWorldextendsActionSupport{privateStringmessage;publicStringgetMessage(){2returnmessage;}@OverridepublicStringexecute(){message=HelloWorld,Nowis+DateFormat.getInstance().format(newDate());returnSUCCESS;}}例1classes/tutorial/HelloWorld.javapackagename=ActionDemoextends=struts-defaultactionname=HelloWorldclass=tutorial.HelloWorldresult/HelloWorld.jsp/result/action/package例1classes/struts.xml中HelloWorldAction的配置在浏览器地址栏中键入,可以看到如图1所示页面。图1HelloWorld输出页面参考JavaDoc,可知ActionSupport类实现了接口:com.opensymphony.xwork2.Action3com.opensymphony.xwork2.LoaleProvidercom.opensymphony.xwork2.TextProvidercom.opensymphony.xwork2.Validateablecom.opensymphony.xwork2.ValidationAwarecom.uwyn.rife.continuations.ContinuableObjectjava.io.Searializablejava.lang.Cloneable默认情况下,当请求HelloWorld.action发生时,Struts运行时(Runtime)根据struts.xml里的Action映射集(Mapping),实例化tutoiral.HelloWorld类,并调用其execute方法。当然,我们可以通过以下两种方法改变这种默认调用。这个功能(Feature)有点类似Struts1.x中的LookupDispathAction。1.在classes/sturts.xml中新建Action,并指明其调用的方法;2.访问Action时,在Action名后加上“!xxx”(xxx为方法名)。实现方法请参考例2:在classes/tutorial/HelloWorld.java中加入以下方法:publicStringaliasAction(){message=自定义Action调用方法;returnSUCCESS;}例2classes/tutorial/HelloWorld.java代码片段实现方法一,在classes/sturts.xml中加入下面代码:actionname=AliasHelloWorldclass=tutorial.HelloWorldmethod=aliasActionresult/HelloWorld.jsp/result/action4例2classes/struts.xml中AlaisHelloWorldAction的配置实现方法二,使用!aliasAction.action地址来访问HelloWorldAction。在浏览器地址栏中键入或!aliasAction.action,可以看到如图2所示页面。图2自定义Action调用方法页面通过上面的两个例子,细心的朋友应该可能会发现classes/tutorial/HelloWorld.java中Action方法(execute和aliasAction)返回都是SUCCESS。这个属性变量我并没有定义,所以大家应该会猜到它在ActionSupport或其父类中定义。没错,SUCCESS在接口com.opensymphony.xwork2.Action中定义,另外同时定义的还有ERROR,INPUT,LOGIN,NONE。此外,我在配置Action时都没有为result定义名字(name),所以它们默认都为success。值得一提的是Struts2.0中的result不仅仅是Struts1.x中forward的别名,它可以实现除forward外的很激动人心的功能,如将Action输出到FreeMaker模板、Velocity模板、JasperReports和使用XSL转换等。这些都过result里的type(类型)属性(Attribute)定义的。另外,您还可以自定义result类型。下面让我们来做一个Velocity模板输出的例子,首先在classes/struts.xml中新建一个Action映射(Mapping),将其result类型设为velocity,如以下代码所示:5actionname=VMHelloWorldclass=tutorial.HelloWorldresulttype=velocity/HelloWorld.vm/result/action例3classes/struts.xml中VMHelloWorldAction的配置新建HelloWorld.vm,内容如下所示:htmlheadtitleVelocity/titlemetahttp-equiv=content-typecontent=text/html;charset=UTF-8/headbodyh2MessagerenderedinVelocity:$message/h2/body/html例3HelloWorld.vm在浏览器地址栏中键入,页面输出如下图3所示。图3HelloWorld.vm的输出页面要运行例3需要在WEB-INF/lib中添加以下几个包:commons-collections-3.2.jarvelocity-1.4.jar6velocity-tools-view-1.2.jaravalon-logkit-2.1.jar前面,我花了不少的时间讨论Action的输出。我老板有句名言——程序无非就是输入、操作和输出。因此,现在我们要讨论一下输入——表单输入。使用Struts2.0,表单数据的输入将变得非常方便,和普通的POJO一样在Action编写Getter和Setter,然后在JSP的UI标志的name与其对应,在提交表单到Action时,我们就可以取得其值。让我们看一个例子,新建LoginAction,它通过Login.jsp的表单获得用户名和密码,验查用户名是否为“max”,密码是否则为“secret”。如果,两者都符合,就在HelloWorld中显示“Welcome,max”,否则显示“InvaliduserorPassword”。packagetutorial;importcom.opensymphony.xwork2.ActionSupport;publicclassLoginextendsActionSupport{privateStringname;privateStringpassword;privateStringmessage;publicStringgetName(){returnname;}publicvoidsetName(Stringname){this.name=name;}publicStringgetPassword(){returnpassword;}publicvoidsetPassword(Stringpassword){this.password=password;7}publicStringgetMessage(){returnmessage;}@OverridepublicStringexecute(){if(max.equals(name)&&Secret.equals(password)){message=Welcome,+name;}else{message=Invaliduserorpassword;}returnSUCCESS;}}例4classes/tutorial/Login.java%@pagecontentType=text/html;charset=UTF-8%%@taglibprefix=suri=/struts-tags%htmlheadtitleLogin/title/headbodys:formaction=Loginmethod=POSTs:textfieldname=namelabel=Username/s:passwordname=passwordlabel=Password/s:submitvalue=Submit//s:form/body/html8例4Login.jspactionname=Loginclass=tutorial.Loginresult/HelloWorld.jsp/result/action例4classes/struts.xml中LoginAction的配置运行Tomcat,在浏览器地址栏中键入,出现如图4所示页面。图4Login.jsp输出页面分别在Username中输入“max”和“secret”,点击“Submit”按钮,出现如图5所示页面。图5Login成功页面在浏览器地址栏中键入
本文标题:Struts 2.1
链接地址:https://www.777doc.com/doc-3364141 .html