Arch4样本程序简易开发指南(3)

2019-01-18 21:58

2 Action开发

Aciton层面是处在页面和服务之间的一个层次,主要的功能是负责数据的组装和传输。请不要在Action层中完成业务逻辑,只能有具体的数据组装的逻辑。请明确Action层的具体作用和职责。

2.1 Struts配置规范开发

Struts2相对struts1有了比较大的改变,此处我们不谈他的实现原理,我们只是从开发角度去了解如何使用struts和如何配置struts.

2.1.1 页面使用

我们要有页面的请求的格式${ctx}/user/update.do

? ${ctx}为发布的名称,可以自动获取,在这里这样写就可以 ? /user为struts的包名,用包来对一系列的方法请求进行管理

? /update.do 为具体的请求,此样本程序我们以.do为请求的结束符,此处的update是配

置文件里面的方法名

2.1.2 配置文件

首先struts2会在工程发布初始加载classpath中struts.xml文件。此文件中包含了很多struts的配置。同时struts也会去检索此配置文件的请求配置,不过对于一个大型系统来说这个配置文件会非常的大,所以我们的把每一个包的请求放到一个单独的文件中进行独立管理。这种做法我们只是需要在struts.xml中导入新的配置文件即可。具体如下:

然后我们的工作就是在struts-user.xml中去进行配置即可.

/pages/platform/user/UserQuery.jsp Package标签描述了一个struts中的独立单位-包,name为user, namespace为/user 也就是说,我们在页面使用请求的时候要使用/user的话,请求就会读取此配置文件进行相关的匹配。

具体的请求是以action为执行处理单位。

? name:页面请求的.do全面的具体名称,例如:update.do.在这里对应的就是name

为update的action。

? class:为具体的执行方法类。两种写法:可以写完整的类名(包括包名),当然也可

以通过从spring的配置中读取,直接写bean id。

? method:是指的在实际类中的方法名。从此可见,页面的请求名可以和实际类中的

方法名不一致,不过我们为了便于管理要求请求名和方法名必须一致。

? result:指定了方法执行完后的页面跳转目标。其中的name属性是指具体类方法的

返回值(注意:input是错误的返回默认值)

2.2 Action类必要数据组装规范开发

首先作为struts的一部分,我们自定义的的Action类需要继承我们已经封装好的Struts2Action类,继承后我们就可以专心去编写数据组装的逻辑而不用在意页面跳转和一些数据组装的实现了。

2.2.1 数据准备

/** 操作类型 */

private String opreateType; public String getOpreateType() { } public void setOpreateType(String opreateType) { } this.opreateType = opreateType; return opreateType; opreateType为页面需要使用的一个变量,我们只需要在action中定义此变量,并生成get

和set方法,剩下的工作就交给struts的值堆栈来完成数据的获取和插入。然后这个变量不管是在action中还是在页面中,都可以直接使用,无需过多的工作。

2.2.2 常规开发

/** * 准备更新员工信息 * * @return */ public String prepareUpdate() { } logger.debug(\准备更新\ + userCode + \员工信息\); opreateType = \; prpDuser = userService.getUser(userCode); return SUCCESS; 此处要做的就是组装数据,然后调用业务服务,获取返回值然后返回到页面进行展示。

2.2.3 writeJSONData使用

此方法主要用于YUI的结果集查询。

if (pageNo == 0) { } if (pageSize == 0) {

pageNo = 1; pageSize = 20;

} QueryRule queryRule = QueryRule.getInstance();// 获取QueryRule对象的Instance if (prpDuser.getUserCode() != null && !\.equals(prpDuser.getUserCode())) { queryRule.addEqual(\, prpDuser.getUserCode());// 增加userCode的查询条件 } if (prpDuser.getUserName() != null && !\.equals(prpDuser.getUserName())) { queryRule.addLike(\, prpDuser.getUserName());// 增加userName的查询条件 } if (prpDuser.getPrpDcompany().getComCode() != null && !\.equals(prpDuser.getPrpDcompany().getComCode())) { .getComCode());// 增加comCode的查询条件 queryRule.addLike(\, prpDuser.getPrpDcompany() } if (prpDuser.getNewUserCode() != null && !\.equals(prpDuser.getNewUserCode())) { queryRule.addEqual(\, prpDuser.getNewUserCode());// 增加newUserCode的查询条件 } ----------------------------------------------------------------------------------------- try { } return NONE; Page page = userService.findUser(queryRule, pageNo, pageSize); this.writeJSONData(page, \, \, \, \); } catch (Exception e) { this.writeJSONMsg(e.getMessage()); 分割线以上为查询条件的增加,而下面则为具体的writeJSONData实现。需要的只是直接调用基类的API即可.注意,此处的属性字段就是页面中yui 结果集展现的字段,务必一致,否则会出现问题。

最需要注意的一点事,在此方法的return 时,需要方位NONE,表示不需要页面跳转。因为此处我们的结果集查询时使用了Ajax的特性,无需页面跳转,所以此处指定为NONE。

2.3 服务调用规范开发

首先在action中需要定义需要的服务,想上面提到的数据准备一直,建立服务对象,并

给比get和set方法。

/** 员工服务 */ private UserService userService; public void setUserService(UserService userService) { } this.userService = userService; public UserService getUserService() { } return userService; 准备完毕后既可以在需要的地方直接使用即可。

/** * 更新员工信息 * * @return */ public String update() { } logger.debug(\更新\ + prpDuser.getUserCode() + \员工信息\); userService.update(prpDuser); return SUCCESS; 红字为服务的使用,就是这么简单。

2.4 Log规范开发

/** Log4j 必要配置 */ private final Logger logger = Logger.getLogger(UserAction.class); Action初始的时候定义当前类的logger对象。 在需要的时候增加logger使用

/**

* 新增员工信息 * * @return */


Arch4样本程序简易开发指南(3).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:CBN-F300齿轮泵容积效率实验台

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: