论坛首页 Java企业应用论坛

如果解决dwr整合struts中,spring的service注射问题?

浏览 10346 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2007-06-12  
最近项目扩展,想采用dwr,遇到个问题!还请各位帮忙!

因为原来的系统是stuts+spring,而且在基础action中封装了一些基础业务方法.
所以新增加的模块也想通过dwr+stuts+spring来做,不想让dwr直接和spring的service交互

所以准备该模块的主要流程还是通过action来做,然后将一些dwr需要交互的业务方法抽离出来放在action中
但是这样就存在一个问题,那就是dwr和action中的这些业务方法交互时,dwr是新建一个action类
那么struts初始化时,spring注入的service就为空!这样供dwr调用的方法中就没法操作service!

想请教下各位大峡又什么好的解决方法没?
以下是action的部分代码:
public class ExpertVoteAction extends BaseAction {
public void setServlet(ActionServlet actionServlet) {
	super.setServlet(actionServlet);
	ServletContext servletContext = actionServlet.getServletContext();
	WebApplicationContext wac =
			WebApplicationContextUtils.getRequiredWebApplicationContext(servletContext);
	proService = (ProfInfoService)wac.getBean("profInfoService");
	}
public ActionForward submit(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response) {
		return mapping.findForward("index");
	}
public List getAllPeople()
    {
    	
    	return proService.QueryData("2005");
    }


这其中getAllPeople就是供dwr直接调用的方法

   发表时间:2007-06-13  
在action中注入这个服务就行了
将getAllPeople()方法改成下面这样:
public List getAllPeople(){

ApplicationContext appContext = WebApplicationContextUtils
		.getWebApplicationContext(this.getServlet().getServletContext());
return appContext.getBean("proService")QueryData("2005");   }
0 请登录后投票
   发表时间:2007-06-13  
我觉得这样的方式不好吧,一般Action都是一个DispatchAction,每个方式都是ActionForward形式的,如果加入DWR就要把业务处理单独封装方法,还不如写到Service中去
0 请登录后投票
   发表时间:2007-07-09  
如果将所有的要的service对象都在BaseAction中取出这样如何?
0 请登录后投票
   发表时间:2007-07-11  
action是个控制器,怎么能和DWR结合呢?当然是DWR直接和SERVICE交互了
0 请登录后投票
   发表时间:2007-08-16  
DWR的配置文件里面有一个creator属性,设置creator为"spring",再在spring的配置文件里面定义这个Action的bean,这样就能注入要用的service了
0 请登录后投票
   发表时间:2007-08-16  
DWR可以控制对外开放的service,直接和service层交互就可以。相对于service层,action是prototype的,所以开销很大。
0 请登录后投票
   发表时间:2008-05-05  
其实你把Struts去掉就很容易做了
创建一个普通的类,这个类就代替Struts的Action
我是这这么写的
package edu.erp.dept.ajax;
import edu.erp.dept.dao.IDeptDAO;

public class DeptService {
	private IDeptDAO deptDAO;

	public IDeptDAO getDeptDAO() {
		return deptDAO;
	}

	public void setDeptDAO(IDeptDAO deptDAO) {
		this.deptDAO = deptDAO;
	}
	
	public void sub_deploy(Object o){
		getDeptDAO().saveOrupdate(o);//保存数据库
	}
}



通过配置的方法把实现注进这些接口里面
<bean id="AjaxDeptService" class="edu.erp.dept.ajax.DeptService">
		<property name="deptDAO">
			<ref local="DeptDAO"/>
		</property>
	</bean>


这是DWR配置
<dwr>
	<allow>
    	<create creator="spring" javascript="AjaxDeptService">
    		<param name="beanName" value="AjaxDeptService"/>
  			<include method="sub_deploy"/>
 		</create>
	</allow>
</dwr>

在JSP页面用AjaxDeptService.sub_deploy就行了

我是这么写的,公布出来让大家提下建议
0 请登录后投票
   发表时间:2008-05-06  
我原来也是像 smalltiger1984 这样做的,感觉还是很好用的。
0 请登录后投票
   发表时间:2008-05-24  
同意楼上说法
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics