2007-09-11

Action的困惑与消息传递

关键字: Action 困惑 消息
  在实现一个个Action的时候,总是陷入困惑.因为实现ActionSupport接口的类总是非单例的,这就意味着每处理一个action请求,webwork就会生成一个该类的实例,虽然垃圾回收器的进步使性能的影响进一步减少,但如果过多的业务逻辑写到Action类里还是有可能产生大对象(这样描述可能不够确切),因为业务逻辑还是写到单例中去比较好.
  这样我们就需要在Action类里引入一个(或说聚合一个)单例的操作类进来,从而,把具体的业务逻辑转移到这个单例的类里面去.但直接与视图(界面)打交道的是Action类,为了打造友好的用户界面,你将不得不在Action里写一些提示信息如,
this.addActionError("您的帐号余额不足");
this.addActionError("请先登陆");

这些信息中有相当一部分是业务逻辑中提示出来的,如果我们把业务逻辑转移到我们新引入的操作类中,则需要这个操作类把业务逻辑中的提示信息返回给Action类,再由Action类通过ActionError返回给视图层.这样就需要制定一种约定来规范操作类和Action类之间的消息传递,并且在项目中都遵循这种规范.不知道大家在实际开发中是怎么来处理的,大家可以讨论一下.
  此外,把提示信息直接写在java的代码里也是很有弊病的,假如提示信息需要改变,就得修改class,再编译,再部署......在下真诚地希望大家说说自己的做法.
评论
yongyuan.jiang 2007-09-12
服务端
this.addActionError(new NoEnoughMoneyException());  
this.addActionError(new NeverLoginException);  


异常信息在文件中去获得。

具体实现根据实际情况
fyting 2007-09-12
我是这样处理的:
如果在service业务流程中断时需要一些提示信息,直接抛异常,外层捕获了就好了。
如果是业务处理过程中的普通信息要输出到页面,是自己写一个MessageHolder类,把业务信息都添加到里面,在action里从这个MessageHolder取消息。看情况,有时候写成ThreadLocal的。
差沙 2007-09-12
我一般是自己定义一个业务异常类,可以传入errorCodes,然后用exceptionMapping来指定异常处理页面。在页面上获得errorCodes,用tag转成资源文件里的东西就OK了。

这样在action里面不用有过多的逻辑,调用service就好了,service要是有业务错误,就抛一个异常,然后就转到view了。

要是想在action里面处理service抛出的异常,catch一下就好了。
kris_xu 2007-09-12
资源文件是一个不错的选择。

再或就是js验证。

总结就是后台验证和前台验证,还有别的验证方法?
boin 2007-09-11
getText("key.name")
用自愿文件或者约定常量。
lizhaosuper 2007-09-11
你可以用资源文件啊然后用标签的形式来应用这样你要是想修改只需要修改资源文件就可以了啊
发表评论

提醒: 该博客已发表在公共论坛,博客所有留言会成为论坛回贴,留言请注意遵守论坛发贴规则

您还没有登录,请登录后发表评论

DavyLee
搜索本博客
最近加入圈子
存档
最新评论