精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (3)
|
|
---|---|
作者 | 正文 |
发表时间:2011-01-14
最后修改:2011-01-14
alyouge 写道 wuxi7227 写道 alyouge 写道 wuxi7227 写道 alyouge 写道 在 spring 和 struts 2 整合的时候, 如果不写上scope="prototype" 那么就是ACTION就是单例的,如果定义全局变量,当第一次传递过去参数,以后访问如果不再传参数,默认的就是第一次传递过去的参数。所以ACTION 必须加上scope="prototype"。
或者谁有跟好的解决办法? 用spring来管理struts2的action有多大意义啊?本身不会被其他bean引用的;想引用其他bean,一样可以注入的。 不用spring 你怎么注入SERVICE? 直接在action里注入service 引用。 service配置文件default-autowire="byName" 就OK了呀。哦,还有,Struts的配置文件 <constant name="struts.objectFactory" value="spring" /> 这样就不用在配置文件配action了。 还有一种传统方法,直接去ServletContext取。 public Object getBean(String name) { ApplicationContext ctx = WebApplicationContextUtils.getRequiredWebApplicationContext(ServletActionContext.getServletContext()); return ctx.getBean(name); } 哦 原来你说的这样啊 ,还不是离不开SPRING 采用第二种方法的话,action就跟spring没关系了呀。 把那个方法写到一个BaseAction里就好了。 即使第一种,不需要在配置文件里写了,也省事很多。 不正是你在找的其它方法么。 |
|
返回顶楼 | |
发表时间:2011-01-14
wuxi7227 写道 alyouge 写道 wuxi7227 写道 alyouge 写道 wuxi7227 写道 alyouge 写道 在 spring 和 struts 2 整合的时候, 如果不写上scope="prototype" 那么就是ACTION就是单例的,如果定义全局变量,当第一次传递过去参数,以后访问如果不再传参数,默认的就是第一次传递过去的参数。所以ACTION 必须加上scope="prototype"。
或者谁有跟好的解决办法? 用spring来管理struts2的action有多大意义啊?本身不会被其他bean引用的;想引用其他bean,一样可以注入的。 不用spring 你怎么注入SERVICE? 直接在action里注入service 引用。 service配置文件default-autowire="byName" 就OK了呀。哦,还有,Struts的配置文件 <constant name="struts.objectFactory" value="spring" /> 这样就不用在配置文件配action了。 还有一种传统方法,直接去ServletContext取。 public Object getBean(String name) { ApplicationContext ctx = WebApplicationContextUtils.getRequiredWebApplicationContext(ServletActionContext.getServletContext()); return ctx.getBean(name); } 哦 原来你说的这样啊 ,还不是离不开SPRING 采用第二种方法的话,action就跟spring没关系了呀。 把那个方法写到一个BaseAction里就好了。 即使第一种,不需要在配置文件里写了,也省事很多。 不正是你在找的其它方法么。 一般情况下,我估计没人这么干吧,最起码我不会这么干!这么说HIBERNATE你也可以这样写了,那还要SPRING干嘛? |
|
返回顶楼 | |
发表时间:2011-01-18
无语。第一种方法效果相同,但是省事呀。你愿意按你的老方法去配action bean那就老方法吧。
|
|
返回顶楼 | |
发表时间:2011-01-24
最后修改:2011-01-24
wuyakenihao 写道 alyouge 写道 wuxi7227 写道 alyouge 写道 在 spring 和 struts 2 整合的时候, 如果不写上scope="prototype" 那么就是ACTION就是单例的,如果定义全局变量,当第一次传递过去参数,以后访问如果不再传参数,默认的就是第一次传递过去的参数。所以ACTION 必须加上scope="prototype"。
或者谁有跟好的解决办法? 用spring来管理struts2的action有多大意义啊?本身不会被其他bean引用的;想引用其他bean,一样可以注入的。 不用spring 你怎么注入SERVICE? 不注入也可以,你想想在你的过滤器或者servlet 中你是如何去spring中bean 的。当然 如果你使用spring 的话,最好都交给spring 来进行管理。 写在父类的构造方法里面 public abstract class BaseAction<M,S> extends ActionSupport implements ModelDriven<M>{ protected M model; protected S service; public BaseAction(){ Class<S> s = (Class<S>)((ParameterizedType)getClass.getGenericSupperclass()) .getActualTypeArguments()[1]; service = (S) applicationContext.getBean(s); Class<M> m =(Class<S>)((ParameterizedType)getClass.getGenericSupperclass()) .getActualTypeArguments()[0]; try{ model = m.newInstance(); }catch(Exception e){ } } public final M getModel(){ return model; } } |
|
返回顶楼 | |