spring-Spring如何给Struts生成新action对象?

问题描述

Spring如何给Struts生成新action对象?

Spring3.2.12
Struts2.3.20

看struts代码:

@Component
@Scope(ConfigurableBeanFactory.SCOPE_SINGLETON)
@ParentPackage("struts-default")
@Namespace("/test")
public class TestAction {

    private String flag;

    @Action(value = "testAction", results = { @Result(name = "success", location = "/index.jsp") })
    public String test() {
        System.out.println("request struts.");
        try {
            WebApplicationContext context = WebApplicationContextUtils
                    .getWebApplicationContext(ServletActionContext.getServletContext());
            TestAction test = context.getBean("testAction", TestAction.class);
            System.out.println("this:" + this.flag+"t" + this);
            System.out.println("spring:" + test.flag+"t" + test);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return "success";
    }

    @PostConstruct
    public void setFlag() {
        this.flag = "From Spring";
    }

运行结果:

 request struts.
this:From Spring    toString:com.me.permission.action.TestAction@732efcfe
spring:From Spring  toString:com.me.permission.action.TestAction@2140243b
request struts.
this:From Spring    toString:com.me.permission.action.TestAction@11e3c2c6
spring:From Spring  toString:com.me.permission.action.TestAction@2140243b
request struts.
this:From Spring    toString:com.me.permission.action.TestAction@521d590d
spring:From Spring  toString:com.me.permission.action.TestAction@2140243b

运行结果 说明,spring中持有一个TestAction的对象,而且是单例;
请求action的时候,是spring给struts生成的action,但是每一次都是新的,并不是spring所持有的那个单例,这是为什么哪?
怎么才能让spring所持有的那个单例,给struts哪?让struts每次请求都使用spring中所持有的那个单例。

解决方案

谢谢各位了,查看了下源码,发现此处配置有错误。
action不需要配置
@Component
@Scope(ConfigurableBeanFactory.SCOPE_SINGLETON),
_而struts在通过插件向spring索要action对象的时候,给spring传递的是此action的全类名,所以不需要再spring中配置action的bean,spring也可以根据struts提供的全类型找到该bean,并将其实例化,交给struts。

解决方案二:

将TestAction对象生成方式采用静态方式生成,在TestAction声明静态代码块来获取该对象

解决方案三:

有一个包叫做 struts2-spring-plugin-2.1.6.jar,再去web.xml里面配置 一下就OK了

contextConfigLocation
<!-- /WEB-INF/applicationContext-*.xml,classpath*:applicationContext-*.xml -->
classpath:beans.xml

 <listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    <!-- default: /WEB-INF/applicationContext.xml -->
</listener>

解决方案四:

有一个包叫做 struts2-spring-plugin-2.1.6.jar,再去web.xml里面配置 一下就OK了

contextConfigLocation
<!-- /WEB-INF/applicationContext-*.xml,classpath*:applicationContext-*.xml -->
classpath:beans.xml

 <listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    <!-- default: /WEB-INF/applicationContext.xml -->
</listener>
时间: 2024-10-21 03:40:11

spring-Spring如何给Struts生成新action对象?的相关文章

如何使用Spring来管理Struts中的Action

当指定struts.objectFactory为spring时,struts2框架就会把bean转发给spring来创建,装配,注入.但是bean创建完成之后,还是由struts容器来管理其生命周期.配置方式: (1)struts.xml中: xml 代码: < constant name="struts.objectFactory" value="spring" /> (2)struts.properties中: java 代码: struts.obj

ajax框架-用Spring,Springmvc,mybatis实现新用户注册并验证保存

问题描述 用Spring,Springmvc,mybatis实现新用户注册并验证保存 注册,将新用户输入的信息提交并进行验证,验证可采用验证框架也可采用validate,验证失败返回注册页面显示错误信息,验证成功后保存用户数据. 登陆,验证,失败后返回登陆页面显示错误信息,验证成功后保存用户信息至session. 登陆成功后,将所有用户数据展示给用户,列出用户详细信息,并分页.用拦截器判断,如果没有登陆的话返回登陆页面并提示用户没有登陆 1.Ioc注入全部采用Spring注解型注入. 2.使用m

Struts中的Action类的工作机制

Struts中的Action类的工作机制  所有的Action类都是org.apache.struts.action.Action的子类.Action子类应该覆写父类的execute()方法.当ActionForm Bean被创建,并且表单验证顺利通过后,Struts框架就会调用Action类的execute()方法.execute()方法的定义如下:    public ActionForward execute(ActionMapping mapping                   

android通过bitmap生成新图片关键性代码_Android

1.关键性代码 复制代码 代码如下: //R.drawable.test为当前工程里的一张图片 Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.test); FileOutputStream fos = null; try { File file = new File("/mnt/sdcard/testfile"); if (!file.exists()) { file.mkdir(); }

影像与矢量数据叠加后,生成新图片

问题描述 影像与矢量数据叠加后,生成新图片 影像与矢量数据叠加后,想把矢量数据绘制在影像上,生成一张新的影像图片. 就像PS样栅格化矢量图层后就是一张图片,与影像图合并为一张图. 以及显示的文本一起栅格化. 项目中是使用GDAL,该如何实现

struts跳转action 报错

问题描述 struts跳转action 报错 There is no Action mapped for action name sms_type_qunfa. - [unknown location]报这个错误 可是我在struts里已经配置了呀求大神指导 解决方案 我真的要疯了 T^T 一个多小时了 解决方案二: 你给的信息太好了,你做的是ssh的项目,还是单纯的struts项目? 提示信息给的也很明显 ,就是找不到sms...这个action 解决方案三: 肯定是访问地址输错了,直接检测一

ajax+hibeinate+spring+spring mvc 分页

问题描述 ajax+hibeinate+spring+spring mvc 分页 我想知道怎么用ajax分页,每页10条,ajax写好之后,后台写什么方法去执行调用,我是新手,不懂这些,求大神帮帮忙我用的是spring,springmvc+hibernate,三个框架,实在是不会了. $(function() { //此demo通过Ajax加载分页元素 var initPagination = function() { var num_entries = $(""#hiddenresu

path-jsp中action 和Struts 中的action虚拟路径问题

问题描述 jsp中action 和Struts 中的action虚拟路径问题 <html:form action=""/clsCompCaseDealAction"" method=""post"" enctype=""multipart/form-data""> 和struts中的 <action attribute=""clsCompCaseDe

javascript-如何用js实现如下生成新的&amp;amp;lt;td&amp;amp;gt;标签,并插入一个数?

问题描述 如何用js实现如下生成新的<td>标签,并插入一个数? 比如我有这样一个table <table> <tr> <td rowspan="2"></td> </tr> </table> 我现在想要通过Js插入一个 <tr><td></td></tr> ,并在其中写上一个值且修改原有的td的rowspan的值为3 多谢! 解决方案 <table