我有一个名为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
变量为userName
和userAge
。
由于我的动作类已经实现了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
拦截器的帮助下,我无法将请求参数设置为动作中的相应属性。
答案 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
之后。