struts2--使用域模型完成注册的简单实例
1.新建一个Web Project,命名为struts-register
2.引入struts的支持
3.新建register.jsp页面
<span style="font-size:18px;"><html>
<body>
<form action="register.action">
username:<input name="user.username"><br>
sex:<input name="user.sex"><br>
age:<input name="user.age"><br>
birth:<input name="user.birth"><br>
bool:<input name="user.bool"><br>
hobby:<input name="user.hobby" type="checkbox" value="music">music
<input type="checkbox" name="user.hobby" value="sports">sports
<input type="checkbox" name="user.hobby" value="games">games<br>
pet name:<input name="user.pet.petName"><br>
<input type="submit" value="register">
</form>
</body>
</html></span>
<span style="font-size:18px;">4.配置struts.xml文件</span>
<span style="font-size:18px;"></span><pre name="code" class="html"><?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
<package name="register" namespace="/" extends="struts-default">
<action name="register" class="com.etc.action.RegisterAction">
<result>/success.jsp</result>
</action>
</package>
</struts>
5.新建com.etc.vo包,包下新建User.java
<span style="font-size:18px;"></span><pre name="code" class="java">package com.etc.vo;
import java.util.Arrays;
import java.util.Date;
public class User {
private String username;
private String sex;
private int age;
private Date birth;
private boolean bool;
private String[] hobby;
private Pet pet;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public Date getBirth() {
return birth;
}
public void setBirth(Date birth) {
this.birth = birth;
}
public boolean isBool() {
return bool;
}
public void setBool(boolean bool) {
this.bool = bool;
}
public String[] getHobby() {
return hobby;
}
public void setHobby(String[] hobby) {
this.hobby = hobby;
}
public Pet getPet() {
return pet;
}
public void setPet(Pet pet) {
this.pet = pet;
}
@Override
public String toString() {
return "User [username=" + username + ", sex=" + sex + ", age=" + age
+ ", birth=" + birth + ", bool=" + bool + ", hobby="
+ Arrays.toString(hobby) + ", pet=" + pet + "]";
}
}
6.在com.etc.vo包下新建Pet.java
<span style="font-size:18px;"></span><pre name="code" class="java">package com.etc.vo;
public class Pet {
private String petName;
public String getPetName() {
return petName;
}
public void setPetName(String petName) {
this.petName = petName;
}
@Override
public String toString() {
return "Pet [petName=" + petName + "]";
}
}
7.新建com.etc.action包,在包下新建RegisterAction.java
<span style="font-size:18px;"></span><pre name="code" class="java">package com.etc.action;
import com.etc.vo.User;
import com.opensymphony.xwork2.ActionSupport;
public class RegisterAction extends ActionSupport{
private User user;
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
public String execute() throws Exception {
System.out.println(user);
return "success";
}
}
8.新建success.jsp页面
<span style="font-size:18px;"></span><pre name="code" class="html"><html>
<body>
register success!
</body>
</html>
9.右键运行,在注册页面输入相应信息
<span style="font-size:18px;"> 运行结果:跳转到success.jsp页面,输出register success!</span>
<span style="font-size:18px;"> <span style="white-space:pre"> </span>在控制台输出:User [username=zoey, sex=female, age=10, birth=Sat Oct 02 00:00:00 GMT+08:00 2010, bool=true, hobby=[music, sports], pet=Pet [petName=petty]]
</span>
注意点:
1)struts中int类型的数据必须要填,虽然不填时不影响运行,但是会报错:ognl.MethodFailedException
2)struts中接收的日期格式只能是yyyy-MM-dd,否则要自己进行转换。
3)上面的例子中,hobby是一个checkbox类型,里面的name属性必须保持一致,而且一定要有value属性,否则得到的结果
就是on,而不是我们实际选中的值
4)其中,在User类中又有一个Pet的对象,声明:private Pet pet;一定要在Pet.java中生成toString()方法,才能得到pet
的name值,否则得到的一直都是一个地址。
还有在register.jsp页面中,pet name的属性name的值写的是user.pet.name;
5)hobby除了可以是String[]类型,还有是List<String>类型
只要在User.java中:private String[] hobby ----->private List<String> hobby;
重新生成hobby的getter/setter方法,toString方法就可以了。