零:解决传参中文乱码
在struts.xml文件中,增加这么一个配置:
<!-- 中文防止乱码 -->
<constant name="struts.i18n.encoding" value="GBK"/>
下文用的VOUser巨简单,只有name和age两个私有属性,和相应的setter/getter。
下文中传输方式用GET/POST结果上都一样,或者在URL末尾追加参数也可以。
一:简单传值,不用VO
action类本身兼职VO的工作,接收的参数放在自身类中。jsp如下:
<h3> 1.简单传值,action兼职VO接收参数 </h3>
<form action="input/inputAction!add" method="post" >
<h4>名称:<input type="text" name="name"></h4>
<h4>年龄:<input type="text" name="age"></h4>
<input type="submit" value="提交至Action">
</form><br>
action如下:
package com.rt.struts2.actionDemo;
import com.opensymphony.xwork2.ActionSupport;
//本身和VO差不多,多了个add方法。除了Action的工作,还要兼职VO
//类中属性和提交表单中的属性名称要一致,Struts会帮忙new的
public class UserAction_simple extends ActionSupport
{
private String name;
private int age;
public String add() {
System.out.println("name=>"+this.name);
System.out.println("age=>"+this.age);
return SUCCESS;
}
//setter&getter
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
二:接收VO并调用里边的方法,拓展参数的用第一种方法接收
jsp中引入VO包,之后在表单传参时,要指定VO名称(user.name和user.age):
<h2> 2.action用专有VO接收参数 </h2>
<form action="input/inputAction!add" method="post" >
<h4>名称:<input type="text" name="user.name"></h4>
<h4>年龄:<input type="text" name="user.age"></h4>
<h4>性别:(VO之外的补充属性)<input type="radio" name="sex" value="男" checked>男
<input type="radio" name="sex" value="女">女 </h4>
<input type="submit" value="提交至Action">
</form><br>
jsp指定过对象之后,struts直接调用对象中的方法,action如下
package com.rt.struts2.actionDemo;
import com.opensymphony.xwork2.ActionSupport;
//引入简单VO对象,新类的属性对其拓展
import com.rt.demo.VO.VOUser;
public class extVOAction extends ActionSupport
{
private VOUser user;//不能new 要等Struts去new
private String sex;//补充的属性
public String add() {
System.out.println("name=>"+user.getName());
System.out.println("age=>"+user.getAge());
System.out.println("sex=>"+this.getSex());
return SUCCESS;
}
//setter&getter
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public VOUser getUser() {
return user;
}
public void setUser(VOUser user) {
this.user = user;
}
}
三:ModelDriven接口,体现MVC
实现此接口后struts和jsp分工更明确:jsp不用指定任何信息,Struts也只组装完VO就返回:
<h2> 3.action用实现ModelDriven《?》接口 </h2>
<form action="input/inputAction!add" method="post" >
<h4>名称:<input type="text" name="name"></h4>
<h4>年龄:<input type="text" name="age"></h4>
<input type="submit" value="提交至Action">
</form><br>
action也更简洁:
package com.rt.struts2.actionDemo;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;
import com.rt.demo.VO.VOUser;
//实现 ModelDriven接口,使Struts负责的东西更少
public class ModelDrivenVOAction extends ActionSupport implements ModelDriven<VOUser>
{
private VOUser user = new VOUser();
public String add() {
System.out.println("name=>"+user.getName());
System.out.println("age=>"+user.getAge());
return SUCCESS;
}
//接口要求的方法
public VOUser getModel() {
// TODO Auto-generated method stub
return user;
}
}