Spring 基于struts2的一个小问题
朋友们!我正在学习vaannila的struts2框架 ,在运行应用程序时,我被success.jsp(文件的一部分)弄糊涂了,如下所示:Spring 基于struts2的一个小问题,spring,struts2,Spring,Struts2,朋友们!我正在学习vaannila的struts2框架 ,在运行应用程序时,我被success.jsp(文件的一部分)弄糊涂了,如下所示: 在一步一步地完成教程之后,当tomcat启动时,浏览器显示 究竟success.jsp${message}的作用是什么,但从逻辑上讲,它应该表明 Spring强大的依赖注入特性。我检查了如下配置: 动作(这里是helloWorld.action) 该类真正执行了操作所需的操作(这里是HelloWorld.java) 行动与工人阶级之间的联系 appli
在一步一步地完成教程之后,当tomcat启动时,浏览器显示
究竟success.jsp${message}的作用是什么,但从逻辑上讲,它应该表明
Spring强大的依赖注入特性。我检查了如下配置:
- 动作(这里是helloWorld.action)
- 该类真正执行了操作所需的操作(这里是HelloWorld.java)
- 行动与工人阶级之间的联系
applicationContext.xml没有像Springbean那样配置
<bean id="helloWorldClass" class="com.vaannila.HelloWorld" > <property name="message" value="Hello World!" /> </bean>
但是,applicationcontext.xml中定义的用于显示DependencyInjection的bean属性似乎不起作用,为什么 消息是否有setter和getter方法?它必须是准确的
setMessage
和getMessage
设置器是否在您的操作中就位-即setMessage(字符串)
如果是,请查看spring是否在任何时候调用它-在该方法中使用调试器
如果所有这些都是真的,发布文件
PS-弹簧的设置完成了吗?就像您定义了Spring配置文件一样,web.xml中也有Spring上下文侦听器,不要忘记在web应用程序中推入Spring jar。${message}应该可以工作。看起来您的jsp无法解析EL。首先检查jsp是否可以解析EL。请尝试使用${1+2}。如果它直接在浏览器上打印,请在jsp页面顶部添加以下内容
<%@ page isELIgnored="false"%>
你也可以用这个
<s:property value="message"/>
我想你是想把这里的两种东西混在一起
${message}
将尝试在从PageScope到applictionScope的各个范围内查找变量“message”
你在干什么
<bean id="helloWorldClass" class="com.vaannila.HelloWorld" >
<property name="message" value="Hello World!" />
</bean>
将在
com.vaannila.HelloWorld
实例中注入属性。这对jsp不可用。为此,您需要将此变量放在action类的某个作用域中(在请求、会话或应用程序中)。我认为您必须添加
<constant name="struts.objectFactory" value="spring" />
添加到struts.xml配置中,以使spring集成正常工作
<struts>
<constant name="struts.objectFactory" value="spring" />
...
</struts>
...
${}
很好,性能优于
。除非处理类型转换
和OGNL
,否则我永远不会使用
。在转义HTML标记时,使用会给您很大的灵活性。而且,如果属性为null,${}将抛出异常。但不会打印任何内容。需要澄清您的误导:${}
不会在属性
不存在时引发异常,而${}
在属性
的值为空时将不会打印任何内容。另请参阅:@lschin非常感谢您澄清了这些误导。你强迫我测试我的评论,发现你是对的!!!塔萨,谢谢!你的解决方案是有效的:)我将密切关注这一机制。感谢所有其他人朋友:)工作正常。如果您完全按照教程进行操作,然后对文件(来自Ischin提供的可下载源)运行diff。朋友四元数,您给出了一个好主意:)朋友Ischin应该是对的,但是如果您在beanhelloWorldClass
中更改了消息,它似乎不起作用。在S2的情况下,${}
实际上会在检查正常servlet范围之前首先查看S2值堆栈。你的第二句话在很大程度上也是错误的;如果一个动作类有一个可访问的属性(早期版本中的公共getter,后期版本中的任何东西,包括没有访问器的私有属性),那么该值将通过EL或S2标记在JSP中可用。你能引用一个例子来支持你所说的吗?一个什么的例子?Re:jspel,这就是S2请求包装器的编写方式。Re:OGNL属性访问,这就是OGNL的工作原理。(我认为可能只是您不需要getter,属性本身必须仍然是公共的;OGNL更改为允许在没有公共getter的情况下访问属性。)
<constant name="struts.objectFactory" value="spring" />
<struts>
<constant name="struts.objectFactory" value="spring" />
...
</struts>