作如下修改:在LoginAction中有两个字段:username,password。把此两个属性重构到com.asm.vo.User类中,然后在LoginAction中提供User对象及相应的get/set方法。现在需要注意的是在login.jsp中会有如下的修改:

户名:<input type="text" name="user.username"><br>

密码:<input type="password" name="user.password"><br>

关键就是改掉name属性值。其它基本无变动。 后话:假如此此User对象并不能和Model层的相应对象完全对应,我们还应借助此User对象在Action中构建出Model层的相应对象,这样,在exectue方法中便能通过构建的Model对象作为参数与Model层交互。

 



1 package com.asm;
2
3 import com.asm.vo.User;
4 import com.opensymphony.xwork2.Action;
5
6 public class LoginAction implements Action{
7
8 private User user = new User();
9
10 public User getUser() {
11 return user;
12 }
13
14 public void setUser(User user) {
15 this.user = user;
16 }
17
18 @Override
19 public String execute() throws Exception {
20 if("struts2".equals(user.getUsername())){
21 return "loginSuccess";
22 }else{
23 return "loginFailure";
24 }
25 }
26
27
28 }


 



1 <%@ page language="java" contentType="text/html; charset=UTF-8"
2 pageEncoding="UTF-8"%>
3 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
4 <html>
5 <head>
6 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
7 <title>Insert title here</title>
8 </head>
9 <body>
10 <form action="<%=request.getContextPath()%>/login.action" method="get">
11 用户名:<input type="text" name="user.username"><br/>
12 密码:<input type="password" name="user.password"><br/>
13 <input type="submit" value="login">
14 </form>
15 </body>
16 </html>


 

Copy上面的myStruts2Vo项目,改名为myStruts2Model项目。重点是修改LoginAction,修改后的主要内容如下:



1 package com.asm;
2
3 import com.asm.vo.User;
4 import com.opensymphony.xwork2.Action;
5 import com.opensymphony.xwork2.ModelDriven;
6
7 public class LoginAction implements Action,ModelDriven<User>{
8
9 private User user = new User();
10
11 @Override
12 public String execute() throws Exception {
13 if("struts2".equals(user.getUsername())){
14 return "loginSuccess";
15 }else{
16 return "loginFailure";
17 }
18 }
19
20 @Override
21 public User getModel() {
22 return user;
23 }
24
25
26 }


 

 



1 <%@ page language="java" contentType="text/html; charset=UTF-8"
2 pageEncoding="UTF-8"%>
3 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
4 <html>
5 <head>
6 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
7 <title>Insert title here</title>
8 </head>
9 <body>
10 <form action="<%=request.getContextPath()%>/login.action" method="get">
11 用户名:<input type="text" name="username"><br/>
12 密码:<input type="password" name="password"><br/>
13 <input type="submit" value="login">
14 </form>
15 </body>
16 </html>


说明:它实现了ModelDriven接口,并使用了泛性机制(必须),因此要求jdk1.5以上。

现在需要注意的是在login.jsp中name属性值为User中两个字段,和第一个实例一样。说明:此方式一般不会使用,在此略作了解。