【问题标题】:spring3 and struts2 integrationspring3 和 struts2 集成
【发布时间】:2013-02-04 07:45:14
【问题描述】:

我在我的应用程序中使用 struts2 和休眠。我已将 ContextLoaderListener 添加到 web.xml

ApplicationContext.xml,我有 2 个这样的 bean:

<bean id="TestImpl"
      class="Service.Impl.TestImpl">
</bean>
<bean id="testaction"
      class="Action.TestAction">
     <property name="TestIml" ref="TestImpl"/>
</bean>

在 TestAction 类中,我有一个对象和这个对象的方法,如下所示:

private TestImpl test1;
String m = test1.testService();

它也有get和set。 当我运行这个项目时,当谈到

String m = test1.testService() 

nullPointerException 出现。 我不确定所有配置是否正确完成或遗漏了什么。 请帮忙。

【问题讨论】:

  • 你在用struts2-spring插件吗?
  • 我正在使用 struts2 和 spring3 库,没有任何插件
  • 你必须安装struts2-spring插件
  • 因此需要安装Struts2-spring插件。
  • 您使用拼写不匹配的方式标记属性名称。 TestIml != TestImpl

标签: spring spring-mvc struts2 spring-integration


【解决方案1】:

既然您已经在使用 Struts2 + Spring,为什么不使用他们的插件呢?可以找到here

通过使用该插件,您可以更紧密地集成到 Struts 2。这使您能够将 bean 注入到内部框架对象中,而不仅仅是注入到您自己的 bean 中。

例如,使用插件 Struts 2 将检查您的所有操作,当它创建它们以服务请求并注入它们时。默认情况下,Struts2-spring 插件按名称使用 autowire。因此,例如在您的操作类中,您有此代码。

public class LoginAction extends UserAction{

    public String execute() {
        return "success";
    }

    public AuthenticateLoginService getAuthenticateLoginService() {
        return authenticateLoginService;
    }

    public void setAuthenticateLoginService(
            AuthenticateLoginService authenticateLoginService) {
        this.authenticateLoginService = authenticateLoginService;
    }

    private AuthenticateLoginService authenticateLoginService;

}

在你的 applicationContext.xml 中你有这个配置。

<bean id="authenticateLoginService" class="services.AuthenticateLoginService"
    scope="singleton">
    <... some properties here
</bean>

所有具有名为“authenticateLoginService”的实例变量的 Action 类,然后 spring 会将 authenticateLoginService bean 注入到所有具有名为 authenticateLoginService 的实例变量的类中,前提是它具有 setter 和 getter

【讨论】:

  • @subodh 我把属性改成了test1,但是NullPointerException依然存在
  • 你确定这是为 struts2 设计的吗?我认为没有 struts spring 插件是可能的
  • @NGS 是的,我很确定。我在我的应用程序中使用 Struts2-spring 插件,代码直接来自它。
  • 自动装配是否真的命中了 Javabeans 属性名称,如 setter 方法名称所表示的那样?
【解决方案2】:

您的test1null,这就是为什么它在String m = test1.testService() 这条线上抛出null pointer exception

我不确定,但你可以试试这个。 property name="test1" 而不是 property name="TestIml"

【讨论】:

  • 你刚刚发表了我的评论作为答案。
猜你喜欢
  • 2013-10-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-29
  • 2012-09-03
  • 1970-01-01
  • 2017-02-25
相关资源
最近更新 更多