2

我有一个Action名为的类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变量 asuserNameuserAge

由于我的Action类已经实现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 页面文本字段的名称与类中的属性名称不匹配Useralias在拦截器的帮助下,我无法像这样将请求参数设置为动作中的相应属性。

4

1 回答 1

1

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

你已经声明

User类具有字符串变量作为userNameuserAge

如果表格像

用户.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>

结果是

成功.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

于 2013-11-30T17:11:54.257 回答