业务控制器Action组件教学示例及课后练习参考资料Word文件下载.docx

上传人:b****5 文档编号:19419623 上传时间:2023-01-06 格式:DOCX 页数:20 大小:431.24KB
下载 相关 举报
业务控制器Action组件教学示例及课后练习参考资料Word文件下载.docx_第1页
第1页 / 共20页
业务控制器Action组件教学示例及课后练习参考资料Word文件下载.docx_第2页
第2页 / 共20页
业务控制器Action组件教学示例及课后练习参考资料Word文件下载.docx_第3页
第3页 / 共20页
业务控制器Action组件教学示例及课后练习参考资料Word文件下载.docx_第4页
第4页 / 共20页
业务控制器Action组件教学示例及课后练习参考资料Word文件下载.docx_第5页
第5页 / 共20页
点击查看更多>>
下载资源
资源描述

业务控制器Action组件教学示例及课后练习参考资料Word文件下载.docx

《业务控制器Action组件教学示例及课后练习参考资料Word文件下载.docx》由会员分享,可在线阅读,更多相关《业务控制器Action组件教学示例及课后练习参考资料Word文件下载.docx(20页珍藏版)》请在冰豆网上搜索。

业务控制器Action组件教学示例及课后练习参考资料Word文件下载.docx

而execute()方法,则是每个Action的入口方法,默认情况下XWork将调用每个Action的execute()方法以完成业务逻辑处理。

这样对于我们的Action类来说,最简单的方式就是只实现publicjava.lang.Stringexecute()throwsjava.lang.Exception这个方法就可以了,它的返回值是一个字符串类型的路径别名,这个别名定义在配置文件的result标记中。

5、实现Action接口的主要目的

(1)规范Action类的编程——必须重写execute()方法,能够减少上面的错误情况

(2)规范Action程序的处理的“结果状态”的名称——标准化返回的结果

6、将UserInfoAction类实现com.opensymphony.xwork2.Action

packagecom.px1987.sshwebcrm.action;

importjava.text.DateFormat;

importjava.util.Date;

importcom.opensymphony.xwork2.Action;

publicclassUserInfoActionimplementsAction{

publicStringexecute(){

resultMessage="

您好!

您登陆成功!

时间为:

"

+

DateFormat.getInstance().format(newDate());

returnthis.SUCCESS;

}

privateStringresultMessage;

publicStringgetResultMessage(){

returnresultMessage;

publicvoidsetResultMessage(StringresultMessage){

this.resultMessage=resultMessage;

publicUserInfoAction(){

}

7、以后不再会出现下面的错误或者不规范的情况

(1)出现错误

(2)也不再会出现不规范的返回结果

8、为什么要实现接口呢?

Struts2中的action可以不再继承于任何类或需要实现任何接口,返回的SUCCESS是在接口com.opensymphony.xwork2.Action中定义,另外同时定义的还有ERROR,INPUT,LOGIN,NONE。

●SUCCESS:

Action正确的执行完成,返回相应的视图;

●NONE:

表示Action正确的执行完成,但并不返回任何视图;

●ERROR:

表示Action执行失败,返回到错误处理视图;

●INPUT:

Action的执行,需要从前端界面获取参数,INPUT就是代表这个参数输入的界面,一般在应用中,会对这些参数进行验证,如果验证没有通过,将自动返回到该视图;

●LOGIN:

Action因为用户没有登陆的原因没有正确执行,将返回该登陆视图,要求用户进行登陆验证。

9、再部署并执行本程序------Struts.xml文件不变化

http:

//127.0.0.1:

8080/sshwebcrm/userManage/userLogin.jsp

将Action类继承ActionSupport类

继承com.opensymphony.xwork2.ActionSupport(可以规范Action编程,同时可以获得Struts2所提供的技术支持)

1、com.opensymphony.xwork2.ActionSupport类(适配器类---类似HttpServlet类)

参考JavaDoc,可知ActionSupport类实现了下面的接口:

●com.opensymphony.xwork2.Action、

●com.opensymphony.xwork2.LoaleProvider

●com.opensymphony.xwork2.TextProvider

●com.opensymphony.xwork2.Validateable

●com.opensymphony.xwork2.ValidationAware

●com.uwyn.rife.continuations.ContinuableObject

●java.io.Searializable

●java.lang.Cloneable

因此,如果继承于ActionSupport类,将能够获得更多的技术支持(如国际化、表单验证、拦截器)、文件上传下载等

2、编程该类

importcom.opensymphony.xwork2.ActionSupport;

//publicclassUserInfoActionimplementsAction

publicclassUserInfoActionextendsActionSupport{

3、再执行本程序http:

8080/Struts2Web/userManage/userLogin.jsp

4、此时如果在Action类不重写execute方法

(1)此时没有语法错误——因为继承是“非强制性”、而实现接口“是强制性”

(2)执行的结果——出现下面的状况,出现了“逻辑性”的错误

(3)由于ActionSupport类不是抽象类

更好的设计,应该将ActionSupport类设计为抽象类,并且将execute()方法继续设计为抽象方法

publicStringexecute(){

return“”;

注意:

在继承ActionSupport类的同时,还必须要重写execute()方法。

体验自定义Action调用方法的实现示例

1、修改UserInfoAction类

publicStringdoUserLogin(){

采用自定义方法处理登陆功能!

Struts2的Action是基于Command模式的实现,在Struts2中,除了实现Action接口的execute()方法之外,Action还可以定义多个执行方法。

这些方法必须要是无方法参数,并且返回返回字符串的方法。

2、修改struts.xml配置文件中的项目

<

?

xmlversion="

1.0"

encoding="

UTF-8"

?

>

!

DOCTYPEstrutsPUBLIC"

-//ApacheSoftwareFoundation//DTDStrutsConfiguration2.0//EN"

"

//struts.apache.org/dtds/struts-2.1.dtd"

struts>

<

includefile="

struts-default.xml"

/>

packagename="

userInfoPackage"

extends="

struts-default"

>

actionmethod="

doUserLogin"

name="

userInfoAction"

class="

com.px1987.sshwebcrm.action.UserInfoAction"

resultname="

/userManage/loginSuccess.jsp<

/result>

/action>

/package>

/struts>

3、访问自定义的Action方法时

在表单中继续以http:

8080/sshwebcrm/userInfoAction.action标准的请求方式进行访问,将出现下面的结果。

注意

此时Strust2系统将找由“method="

”所定义的目标方法,而不再找标准的execute方法。

从结果来看是相同的,这主要是由于在配置文件中的method="

的设置所起的作用。

4、如果Action类中有多个不同的自定义方法时,刚才的实现方法不能满足要求

(1)此时可以采用在Action名后加上“!

xxx”(xxx为目标方法名)指定请求的目标方法

因此,该方法能够满足在Action类中有多个不同的处理器方法的应用要求。

(2)实现的方法

只需要在请求时指定目标方法名。

比如,修改userLogin.jsp页面的表单提交的action属性为下面的内容

formaction="

${pageContext.request.contextPath}/userInfoAction!

doUserLogin.action"

method="

post"

并且可以将“method="

”除掉,

再进行表单的提交,同样也将出现下面的结果

其中struts.xml文件中的<

package>

标签中namespace属性是对我们的action的访问路径有影响的。

它的出现可以让我们避免多个名字相同的action定义出现冲突。

它的默认值是””,也就是空字符串。

另外它还可以取值为根目录,也就是”/”,被称为RootNamespace,它对应着访问Web应用根目录的情况,对我们的例子来说就是在浏览器中访问/showDateAction。

其它的取值,一般来说以/开头,例如/example,则相当于给当前所有的action定义都加了一个前缀,那么假设我们当前例子的配置文件的package定义为:

namespace="

/webcrmUserInfo"

重新发布项目后,我们访问Action的路径将会是:

8080/sshwebcrm/webcrmUserInfo/userInfoAction!

doUserLogin.action。

体验Struts2中Action类的多个业务处理方法的应用

1、如果需要自定义多个不同的业务调度方法(模拟Struts框架中的DisptachAction的功能)

(1)在配置文件中不能再采用method属性的定义方式

在struts.xml中除掉method="

项目

DOCTYPEstrutsPUBLIC

//struts.apache.org/dtds/struts-2.0.dtd"

actionname="

class="

method="

/package>

(2)在Action类中再增加第2个自定义的方法

publicStringdoUserRegister(){

您好!

这是在另一个自定义方法处理的注册功能!

(3)在userManager目录中再添加一个userRegister.jsp页面并增加下面的表单

%@pagepageEncoding="

gb2312"

%>

%@taglibprefix="

c"

uri="

DOCTYPEhtmlPUBLIC"

-//W3C//DTDXHTML1.0Transitional//EN"

//www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"

htmlxmlns="

//www.w3.org/1999/xhtml"

head>

title>

蓝梦集团CRM系统在线用户注册功能页面<

/title>

linkhref="

c:

urlvalue='

/css/pageContentStyle.css'

rel="

stylesheet"

type="

text/css"

/>

scriptlanguage="

javascript"

src="

/javascript/commonJavaScript.js'

type="

text/javascript"

/script>

/head>

body>

jsp:

includepage="

/commonPage/pageHead.jsp"

/jsp:

include>

/commonPage/navMenuBar.jsp"

br/>

divid="

someOnePageContent"

doUserRegister.action"

输入右面的认证码:

inputtype="

text"

name="

verifyCodeDigit"

br/>

用户类型:

selectname="

type_User_Admin"

<

optionvalue="

1"

前台用户<

/option>

<

2"

后台管理员<

/select>

您的名称:

userName"

您的密码:

password"

userPassWord"

submit"

value="

提交"

submitButton"

onclick="

this.value='

正在提交请求,请稍候'

reset"

取消"

/form>

/div>

/commonPage/authorInfo.jsp"

/body>

/html>

同样对userLogin.jsp页面页采用相同的方法

(4)首先浏览首页http:

8080/sshwebcrm/index.jsp

ahref="

${pageContext.request.contextPath}/userManage/userRegister.jsp"

系统注册<

/a>

&

nbsp;

|&

${pageContext.request.contextPath}/userManage/userLogin.jsp"

系统登录<

&

(5)然后再对第二个表单(也就是注册表单)进行操作http:

8080/sshwebcrm/userManage/userRegister.jsp

提交后,将产生出下面的结果

同样对于用户登录功能实现的测试

这样将能够产生出原来的Struts中的DisptachAction的效果,而只需要在请求的URL中指示目标方法的名称。

同一个Action类可以定义为不同的“逻辑”(名称)

1、体验采用“!

”所带来的问题——很容易出现错误

${pageContext.request.contextPath}/userInfoAction.action!

2、在UserInfoAction类中再增加另外两个方法do

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > PPT模板 > 其它模板

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1