Spring 基于struts2的一个小问题

Spring 基于struts2的一个小问题,spring,struts2,Spring,Struts2,朋友们!我正在学习vaannila的struts2框架 ,在运行应用程序时,我被success.jsp(文件的一部分)弄糊涂了,如下所示: 在一步一步地完成教程之后,当tomcat启动时,浏览器显示 究竟success.jsp${message}的作用是什么,但从逻辑上讲,它应该表明 Spring强大的依赖注入特性。我检查了如下配置: 动作(这里是helloWorld.action) 该类真正执行了操作所需的操作(这里是HelloWorld.java) 行动与工人阶级之间的联系 appli

朋友们!我正在学习vaannila的struts2框架 ,在运行应用程序时,我被success.jsp(文件的一部分)弄糊涂了,如下所示:

在一步一步地完成教程之后,当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"/>

我想你是想把这里的两种东西混在一起

  • Spring依赖注入和
  • JSP作用域变量
  • ${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应该是对的,但是如果您在bean
    helloWorldClass
    中更改了消息,它似乎不起作用。在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>