2007-06-12
如果解决dwr整合struts中,spring的service注射问题?
关键字: dwr+struts+spring
最近项目扩展,想采用dwr,遇到个问题!还请各位帮忙!
因为原来的系统是stuts+spring,而且在基础action中封装了一些基础业务方法.
所以新增加的模块也想通过dwr+stuts+spring来做,不想让dwr直接和spring的service交互
所以准备该模块的主要流程还是通过action来做,然后将一些dwr需要交互的业务方法抽离出来放在action中
但是这样就存在一个问题,那就是dwr和action中的这些业务方法交互时,dwr是新建一个action类
那么struts初始化时,spring注入的service就为空!这样供dwr调用的方法中就没法操作service!
想请教下各位大峡又什么好的解决方法没?
以下是action的部分代码:
这其中getAllPeople就是供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直接调用的方法
评论
zhongli
2008-06-05
很同意楼主的想法,dwr是web层的东西,不应该直接调用service,应该走统一的入口action。偶用的是ww,但都是一样的道理,偶是做了个专门的调用action的扩展,在其模仿http请求,取得返回bean给DWR。这样有一个好处就是不用配置很多DRW的东东,每个action既可以用url调用,有可以被ajax调用。
shenchengli
2008-06-05
dwr+spring 时 页面加载速度非常的慢.是什么原因呢??
allenny
2008-05-25
问题在于你还在使用与Web容器耦合的Struts 1.X,实在难以用Spring创建,否则可以用楼上某个朋友的方案。不过也不要紧,你可以用Strecks改造一下你的项目,就可以了,我曾经实现过与你类似的需求的。
jolestar
2008-05-24
dwr干嘛非要和struts扯在一起?单另作一个类,把spring的service注入进去操作不就行了。
wangyazhen
2008-05-24
同意楼上说法
yuankai
2008-05-06
我原来也是像 smalltiger1984 这样做的,感觉还是很好用的。
smalltiger1984
2008-05-05
其实你把Struts去掉就很容易做了
创建一个普通的类,这个类就代替Struts的Action
我是这这么写的
通过配置的方法把实现注进这些接口里面
这是DWR配置
在JSP页面用AjaxDeptService.sub_deploy就行了
我是这么写的,公布出来让大家提下建议
创建一个普通的类,这个类就代替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就行了
我是这么写的,公布出来让大家提下建议
qqgoodluck
2007-08-16
DWR可以控制对外开放的service,直接和service层交互就可以。相对于service层,action是prototype的,所以开销很大。
herbert
2007-08-16
DWR的配置文件里面有一个creator属性,设置creator为"spring",再在spring的配置文件里面定义这个Action的bean,这样就能注入要用的service了
littcai
2007-07-11
action是个控制器,怎么能和DWR结合呢?当然是DWR直接和SERVICE交互了
vannimouse
2007-07-09
如果将所有的要的service对象都在BaseAction中取出这样如何?
littcai
2007-06-13
我觉得这样的方式不好吧,一般Action都是一个DispatchAction,每个方式都是ActionForward形式的,如果加入DWR就要把业务处理单独封装方法,还不如写到Service中去
wf_7758520
2007-06-13
在action中注入这个服务就行了
将getAllPeople()方法改成下面这样:
将getAllPeople()方法改成下面这样:
public List getAllPeople(){
ApplicationContext appContext = WebApplicationContextUtils
.getWebApplicationContext(this.getServlet().getServletContext());
return appContext.getBean("proService")QueryData("2005"); }
- 浏览: 4330 次
- 性别:

- 来自: 北京

- 详细资料
搜索本博客
最近加入圈子
最新评论
-
如果解决dwr整合struts中 ...
很同意楼主的想法,dwr是web层的东西,不应该直接调用service,应该走统 ...
-- by zhongli -
如果解决dwr整合struts中 ...
dwr+spring 时 页面加载速度非常的慢.是什么原因呢??
-- by shenchengli -
如果解决dwr整合struts中 ...
问题在于你还在使用与Web容器耦合的Struts 1.X,实在难以用Spring ...
-- by allenny -
如果解决dwr整合struts中 ...
dwr干嘛非要和struts扯在一起?单另作一个类,把spring的servic ...
-- by jolestar -
如果解决dwr整合struts中 ...
同意楼上说法
-- by wangyazhen






评论排行榜