Struts2 忽略 applicationContext 中的 Action class 值属性

Struts2 ignoring Action class value properties from applicationContext

我不确定为什么 Struts 没有为操作 class 设置在 applicationContext.xml 中定义的简单字符串 属性。它正在设置一个参考,但不是 String 值 属性。就好像 Struts 忽略了这些属性,因为我尝试了这样的事情

<property name="IDontExistInActionClass" value="MyValue" /> 

和 Struts 在实例化 Action class 时不会抱怨,因为 setter 不存在。但是 userBO 引用实际上是在 Action class 中设置的,所以这很奇怪。 也许我在做一些愚蠢的事情,所以我很感激第二双眼睛。

只是提一下,这适用于未实现 SessionAware 接口的 Action classes。

applicationContext.xml:

<bean id="loginAction" class="LoginAction" scope="prototype">
        <property name="test" value="testing" />
        <property name="userBO" ref="userBO" />
</bean> 

Struts.xml:

 <package name="user" namespace="/user" extends="struts-default">
        <action name="login"
                class="LoginAction">
                <result name="success">/WEB-INF/jsp/loginmain.jsp</result>
        </action>
</package>

动作Class:

public class LoginAction extends ActionSupport implements SessionAware {
    private Map<String,Object> session;
    private UserBO userBO;
    private String test;


    @Override
    public String execute() throws Exception{
        return "success";
    }

    //~Accessors
    @Override
    public void setSession(Map<String, Object> sMap) {
        this.session = sMap;
    }
    public void setUserBO(UserBO userBO) {
        this.userBO = userBO;
    }
    public void setTest(String value) {
        this.test = value;
    }   
}

在 class 属性中,您应该使用 applicationContext.xml 中的 bean id。

<package name="user" namespace="/user" extends="struts-default">
    <action name="login" class="loginAction">
        <result name="success">/WEB-INF/jsp/loginmain.jsp</result>
    </action>
</package>