struts Action设置数据的方法

一.属性驱动

       注:示例中的实体类没有相应展示出来

  1.基本数据类型的属性

        基本数据类型的属性指每一个前台提交的属性在后台对应的Action类中都有相应的属性与之相对应

       例如:前台表单:       

<form action="login" method="post">
	<table>
			<tr>
				<td>用户名:</td>
				<td><input type="text"  name="userName"></td>
			</tr>
			<tr>
				<td>密码:</td>
				<td><input type="password"  name="password"></td>
			</tr>
			<tr>
				<td><input type="submit" value="登录"></td>
			</tr>
	</table>
</form>

               后台Action中设置对应参数:

       

public class UserAction extends ActionSupport{
	
	private static final long serialVersionUID = 1L;
	private String userName;
	private String password;
	
	public String getUserName() {
		return userName;
	}

	public void setUserName(String userName) {
		this.userName = userName;
	}

	public String getPassword() {
		return password;
	}

	public void setPassword(String password) {
		this.password = password;
	}

	@Override
	public String execute() throws Exception {
		User user=new User();
		UserService userService=new UserService();
		user.setUserName(userName);
		user.setPassword(password);
		if(userService.login(user)){
			return SUCCESS;
		}
		else return ERROR;		
	}
}

       这样前台的参数就能由strut2传到相应后台

  这种方式缺点:如果参数太多后台代码太繁琐

     2.javabean属性

   相对基本数据类型而言,javabean的前台表单只需要在name前面加上对象点,例如user.name,user.password

   例如:

<form action="login" method="post">
	<table>
			<tr>
				<td>用户名:</td>
				<td><input type="text"  name="user.userName"></td>
			</tr>
			<tr>
				<td>密码:</td>
				<td><input type="password"  name="user.password"></td>
			</tr>
			<tr>
				<td><input type="submit" value="登录"></td>
			</tr>
	</table>
</form>

    这样在后台只需要提供一个bean的生成方式:

    Action中:

    

public class UserAction2 extends ActionSupport{

	private static final long serialVersionUID = 1L;
	
	private User user;
	public User getUser() {
		return user;
	}
	public void setUser(User user) {
		this.user = user;
	}
	@Override
	public String execute() throws Exception {
		UserService userService=new UserService();
		if(userService.login(user)){
			return SUCCESS;
		}
		else return ERROR;
	}
}

    只需写一个User对象,后台就能自动获取

 看法:代码比较简洁明了,可以传入多个javabean的对象,只是前台写的时候需要注意对象名+点,如:user.password

二.模型驱动

   模型驱动前面的表单属性就直接填name,但是要注意与实体中的属性相对应

<form action="login" method="post">
	<table>
			<tr>
				<td>用户名:</td>
				<td><input type="text"  name="userName"></td>
			</tr>
			<tr>
				<td>密码:</td>
				<td><input type="password"  name="password"></td>
			</tr>
			<tr>
				<td><input type="submit" value="登录"></td>
			</tr>
	</table>
</form>

   后台的Action中必须继承ModelDriver<T>,T填具体的bean 

 

public class UserAction3 extends ActionSupport implements ModelDriven<User>{
	
	private static final long serialVersionUID = 1L;
	
	private User user=new User();	

	@Override
	public String execute() throws Exception {
		UserService userService=new UserService();		
		if(userService.login(user)){
			return SUCCESS;
		}
		else return ERROR;		
	}
	@Override
	public User getModel() {
		return user;
	}
}

       注意:这种模型驱动方式不会自动给你实例化bean,需要自己创建new  User();不然会报空指针异常

  观点: 模型驱动方式代码简介,前台也不用像javabean方式那样

      但是当前台传入不是单个bean的时候,不适合用模型驱动,

      因为必须继承ModelDriver<T>,泛型只有一种类型

     

    

         

原文地址:https://www.cnblogs.com/goxcheer/p/7403165.html