您好,欢迎访问三七文档
当前位置:首页 > 金融/证券 > 股票报告 > Action跟Actionsupport的区别
Action跟Actionsupport的区别当我们在写action的时候,可以实现Action接口,也可以继承Actionsupport这个类.到底这两个有什么区别呢?Action接口有:publicstaticfinaljava.lang.StringSUCCESS=success;publicstaticfinaljava.lang.StringNONE=none;publicstaticfinaljava.lang.StringERROR=error;publicstaticfinaljava.lang.StringINPUT=input;publicstaticfinaljava.lang.StringLOGIN=login;publicabstractjava.lang.Stringexecute()throwsjava.lang.Exception而Actionsupport这个工具类在实现了Action接口的基础上还定义了一个validate()方法,重写该方法,它会在execute()方法之前执行,如校验失败,会转入input处,必须在配置该Action时配置input属性。另外,Actionsupport还提供了一个getText(Stringkey)方法还实现国际化,该方法从资源文件上获取国际化信息.这样在自定义标签时可以定义一个变量为newactionsupport对象实现国际化ActionSupport类的作用struts2不要求我们自己设计的action类继承任何的struts基类或struts接口,但是我们为了方便实现我们自己的action,大多数情况下都会继承com.opensymphony.xwork2.ActionSupport类,并重写此类里的publicStringexecute()throwsException方法。因为此类中实现了很多的实用借口,提供了很多默认方法,这些默认方法包括国际化信息的方法、默认的处理用户请求的方法等,这样可以大大的简化Acion的开发。Struts2中通常直接使用Action来封装HTTP请求参数,因此,Action类里还应该包含与请求参数对应的属性,并且为属性提供对应的getter和setter方法==========================s:property关于struts2标签取值的备忘录取值要通过s:propertyvalue=/或在任意的s:/标签内使用%{};当Action的valueStack中有该属性的值时,只需直接使用该属性的名字即可当Action的valueStack中没有该属性的值时,比如在session,application范围中的属性值时,需要加#或者#attr.;例子:假设某Action中有person成员变量,在application中存在company属性那么我们可以通过以下方法取值:s:propertyvalue=person.name/s:propertyvalue=#person.name/s:propertyvalue=company.name///无法取到,因为company不在action的valueStack中s:propertyvalue=#company.name/s:textfieldname=person.namevalue=person.name///错误,value会直接显示person.name字样s:textfieldname=person.namevalue=%{person.name}/s:textfieldname=person.company.namevalue=%{#company.name}/s:textfieldname=person.company.namevalue=%{#attr.company.name}/=====================一次Action调用都会创建一个ActionContext调用:ActionContextcontext=ActionContext.getContext()ValueStack由OGNL框架实现可以把它简单的看作一个集合StackObject:放入stack中的对象,一般是actionStackContext(map):stack上下文,它包含一些列对象,包括request/session/attr/applicationmap等。EL:存取对象的任意属性,调用对象的方法,遍历整个对象结…===========WebWork2.2笔记(二)ActionSupport及其他基础知识绝大多数情况下,WebWork不是直接实现com.opensymphony.xwork.Action接口,而是扩展com.opensymphony.xwork.ActionSupport类。ActionSupport实现了除Action以外的其他几个接口,主要的几个接口是:com.opensymphony.xwork.Validateablecom.opensymphony.xwork.Validateawarecom.opensymphony.xwork.TextProvidercom.opensymphony.xwork.LocaleProvider这些接口主要是提供给WebWork的拦截器使用的,接口配合拦截器可以实现AOP功能。比如Validateable接口和Validateaware接口配合DefailtWorkflowInterceptor就可以实现对用户输入进行检验的功能,当用户调用Action时,首先执行Validateable接口定义的validate()方法,如果在这个方法中用户使用接口Validateaware中的方法设置了错误信息,则DefaultWorkflowInterceptor会自动终止Action的执行,并产生一个INPUT的result,只有没有任何错误信息才会执行Action的剩余部分。前面我们定义的xwork.xml配置文件中包含了一句:includefile=webwork-default.xml,这个webwork-default.xml包含在webwork的jar包中。webwork-default.xml预建了很多常用的result-type、interceptor和interceptor-stack。其中interceptor和interceptor-stack用于定义webwork将要使用那些拦截器。interceptor定义一个拦截器,而interceptor定义一组拦截器。如果一个Action使用一组拦截器,则这些拦截器将以其定义的顺序执行,可见,interceptor-stack中拦截器的顺序时很重要的。在webwork-default.xml中有如下定义:interceptorclass=com.opensymphony.xwork.interceptor.DefaultWorkflowInterceptorname=workflow......而名为validationWorkflowStack和completeStack这两个预建的interceptor-stack则包含了workflow这个interceptor。下面做一个检查用户输入的练习,如果用户没有输入内容,则让用户重新输入,并且提示错误信息。web.xml与上次的相同。xwork.xml/interceptor/includexml代码1.2.=webwork-default.xml/6.7.packagename=defaultextends=webwork-default8.9.default-interceptor-refname=validationWorkflowStack/10.actionname=alidateInputclass=example.ValidateInputAction11.resultname=successsuccess.jspresult12.resultname=inputinput.jspresult13.action14.15.package16.xworkinput.jspxml代码1.%@taglibprefix=wwuri=/webwork%2.html3.headtitleInputSomethingtitlehead4.body5.6.ww:formaction=alidateInput.action7.ww:textfieldlabel=Inputsomething:name=somethingww:textfield8.ww:submitww:submit9.ww:form10.11.body12.htmlsuccess.jspxml代码1.%@taglibprefix=wwuri=/webwork%2.html3.headtitleSuccess!titlehead4.body5.ww:propertyvalue=something/6.body7.html==============================Action的实例,总是放到valuestack中。因为Action放在stack中,而stack是root(根对象),所以对Action中的属性的访问就可以省略#标记。但是,要访问ActionContext中其它对象的属性,就必须要带上#标记,以便让OGNL知道,不是从根对象,而是从其它对象中去寻找。Struts2中OGNL,valueStack,stackContext的学习学习Struts2,一直不明白表单中的值是怎么传给Action的,上网查了些资料,基本了解了!下面基本是从几个人的BOLG转载过来,以后记不清了再来看~[color=red]先看看我做的实验jsp页面Java代码s:formaction=hello/converter.actionmethod=posts:textfieldname=pointlabel=点/s:textfields:textfieldname=point2label=2/s:textfields:textfieldname=point3label=3/s:textfields:textfieldname=agelabel=年龄/s:textfields:textfieldname=datelabel=日期/s:textfields:submitname=提交/s:submit/s:form结果图(是通过s:debug/s:debug得到的)valuestack:Stackcontext:通过图中我们可以看到valuestack中包括我传递的值(point,point2,point3,age,date)stackcontext中包括了requestapplicationOgnlValueStack(root)sessionparameters等属性值栈(ValueStack)Struts2将OGNL上下文设置为Struts2中的ActionContext(内部使用的仍然是OgnlContext),并将值栈设为OGNL的根对象。我们知道,OGNL上下文中的根对象可以直接访问,不需要使用任何特殊的“标记”,而引用上下文中的其他对象则需要使用“#”来标记。由于值栈是上下文中的根对象,因此可以直接访问。那么对于值栈中的对象该如何访问呢?Struts2提供了一个特殊的OGNLPropertyAccessor,它可以自动查找
本文标题:Action跟Actionsupport的区别
链接地址:https://www.777doc.com/doc-2900473 .html