如何使用别名拦截器来实现实用程序类对象的属性

时间:2013-11-30 16:55:53

标签: java jsp struts2 alias struts2-interceptors

我有一个名为MyFirstClass的班级,其中我有一个String变量和一个User变量,如下所示:

public class MyFirstClass extends ActionSupport implements ModelDriven<User>,Preparable {

    User user;

    private String nickName;

    public void prepare(){
       user = new User();       
    }

    public User getModel(){
       return user;
    }
    .........................
    ........................    
}

User类的String变量为userNameuserAge。 由于我的动作类已经实现了ModelDriven接口,因此应该在请求中设置User类的变量。

我还有一个JSP文件,其设计如下:

<s:form action="index">
<s:actionerror/>
<s:textfield name="myname" label="UserName:">
</s:textfield>
<s:textfield name="myage" label="UserAge:">
</s:textfield>
<s:submit key="submit" name="submit"/>
</s:form>

struts.xml被设计为,

<package name="default" namespace="/" extends="struts-default">
        <action name="index" class="com.actionClasses.MyFirstClass">
            <param name="aliases">#{'myname':'nickName','myname':user.userName,'myage':user.age}</param>
            <interceptor-ref name="alias"/> 
            <interceptor-ref name="basicStack"/>        
            <result name="success">/success.jsp</result>
            <result name="input">/user.jsp</result>                
        </action>
</package>

我的问题是,由于我的JSP页面文本字段的名称与User类中的属性名称不匹配。在alias拦截器的帮助下,我无法将请求参数设置为动作中的相应属性。

1 个答案:

答案 0 :(得分:1)

更改别名的配置以匹配属性名称,也使用您需要的defaultStack,因为它包含modelDriven拦截器。你说过了

  

User 类的字符串变量为 userName userAge

如果表格是

<强> user.jsp:

<s:form action="index">
<s:actionerror/>
<s:textfield name="name" label="UserName:">
</s:textfield>
<s:textfield name="age" label="UserAge:">
</s:textfield>
<s:submit key="submit" name="submit"/>
</s:form>

,结果是

<强>的success.jsp:

<s:actionerror/>
<s:label name="userName" label="UserName:"/><br/>
<s:label name="userAge" label="UserAge:"/><br/>

配置应为:

<package name="default" namespace="/" extends="struts-default">
    <action name="index" class="com.actionClasses.MyFirstClass">
        <param name="aliases">#{'name':'userName','age':'userAge'}</param>
        <interceptor-ref name="defaultStack"/>        
        <interceptor-ref name="alias"/> 
        <result name="success">/success.jsp</result>
        <result name="input">/user.jsp</result>                
    </action>
</package>

alias拦截器最后是因为它应该在modelDriven之后。