struts1.3+hibernate3.0+spring2.0整合已经整合完了,但是有个问题就是action和logic之间的传值问题,也就是logic的接口应该怎么定义才能打到action调用的统一
这个是我项目的结构图
[img]http://dl.iteye.com/upload/attachment/540343/143fd1b4-a59c-3648-bece-5effce7a30da.jpg[/img]
LoginAction
[code="java"]
public class LoginInAction extends BaseAction {
LoginLogic loginLogic;
@Override
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
String msg = "";
String url = request.getParameter("url");
LoginVO vo = new LoginVO
msg = getLoginLogic().doIt(vo);
//判断doit返回的string是成功还是失败
if(msg.toLowerCase().indexOf("error") >= 0){
request.setAttribute(ERROR_KEY.ERROR_INFO_NAME, msg);
return mapping.findForward("error");
}
if(msg.equals(ERROR_KEY.SUCCESS)){
userLoginVO = new UserLoginVO();
//成功就把logic里面的vo获得到,传送到页面和session中
userLoginVO = getLoginLogic().getUserLoginVO();
request.getSession().setAttribute(WEB_KEY.VO_USER_LOGIN, userLoginVO);
return mapping.findForward("success");
}
return mapping.findForward("error");
}
private LoginLogic getLoginLogic() {
return loginLogic;
}
public void setLoginLogic(LoginLogic loginLogic) {
this.loginLogic = loginLogic;
}
}
[/code]
LoginLogic 接口
[code="java"]
public interface LoginLogic {
/**
* 主函数
* @param loginVO
* @return ERROR_KEY
*/
public String doIt(LoginVO loginVO);
/**
* 获取userVO
*
* @return LoginVO
*/
public UserLoginVO getUserLoginVO();
}
[/code]
LoginLogicImpl
[code="java"]
public class LoginLogicImpl extends BaseLogicImpl implements LoginLogic {
private LoginService loginService;
private UserLoginVO userLoginVO;
public LoginLogicImpl() {
}
public String doIt(LoginVO vo) {
String msg = ERROR_KEY.ERROR_USERIDPWD_500;
return msg;
}
private LoginService getLoginService() {
return loginService;
}
public void setLoginService(LoginService loginService) {
this.loginService = loginService;
}
public UserLoginVO getUserLoginVO() {
return userLoginVO;
}
private void setUserLoginVO(UserLoginVO userLoginVO) {
this.userLoginVO = userLoginVO;
}
[/code]
可以看出,为了获取一个uservo只能在logic的实现类里面定义一个
private UserLoginVO userLoginVO;
大家知道,spring默认是单例模式,所以这样的话可能回导致vo被其他请求修改
我想问问有没有一种方法能达到logic返回值可以支持多个,并且接口能定义为通用的,例如doit()这样的接口,所有的logic都是这一个主入口
我目前想到的就是,把返回值定义为成Map的
请问谁还有好的办法,谢谢了,前提是还是使用spring单例模式.谢谢