朋友们!我正在通过vaannila的Struts 2 Spring Integration学习struts2框架 ,在运行应用程序时,我对success.jsp感到困惑,该文件的一部分如下所示:
按照教程后一步一步的布局,当tomcat启动时,浏览器显示 只是成功的内容.jsp $ {message} 。但从逻辑上讲它应该表明 Spring强大的依赖注入功能。我检查了配置:
<body>
${message}
</body>
行动与工人阶级之间的联系
applicationContext.xml配置了类似
的spring bean <bean id="helloWorldClass" class="com.vaannila.HelloWorld" >
<property name="message" value="Hello World!" />
</bean>
struts.xml确实命名了一个名为helloWolrd
的动作来引用在applicationContext.xml中定义的bean helloWorldClass
喜欢:
<action name="helloWorld" class="helloWorldClass"> <result name="SUCCESS">/success.jsp</result> </action>
但似乎显示在applicationcontext.xml中定义的DependancyInjection的bean属性不能正常工作,为什么?
答案 0 :(得分:2)
$ {message}应该有效。看起来你的jsp无法解析EL。首先检查你的jsp是否可以解析EL。试试$ {1 + 2}。如果它直接在浏览器上打印,请在jsp页面的顶部添加以下内容。
<%@ page isELIgnored="false"%>
您也可以使用此功能!
<s:property value="message"/>
答案 1 :(得分:1)
你的Action中的setter是否存在 - 即setMessage(String)??
如果是,请查看弹簧是否在任何时候实际调用它 - 在此方法中使用调试器。
如果所有这些都属实,请发布文件吗?
PS - Spring的设置是否完整?就像你定义了Spring配置文件一样,web.xml确实有Spring上下文监听器,并且不要忘记在你的web应用程序中推入Spring jar。
答案 2 :(得分:0)
“message
”有setter和getter方法吗?它必须完全是setMessage
和getMessage
答案 3 :(得分:0)
我猜你想在这里混合两件事。
${message}
将尝试在从PageScope开始直到applictionScope的各种范围内查找变量'message'。
在哪里做
<bean id="helloWorldClass" class="com.vaannila.HelloWorld" >
<property name="message" value="Hello World!" />
</bean>
将在com.vaannila.HelloWorld
实例中注入一个属性。这对jsp不可用。为此,您需要将此变量放在动作类的某个范围内(在请求,会话或应用程序中)。
答案 4 :(得分:0)
我认为你必须添加
<constant name="struts.objectFactory" value="spring" />
到你的struts.xml配置,使spring集成正常工作。
<struts>
<constant name="struts.objectFactory" value="spring" />
...
</struts>