试想如果我们的一个对象有1000个参数而我们要修改其中的500个参数,那么我们该怎么做呢,我们要么在页面中设置500个隐藏域要么在service层中用上面的方法重新设置500遍?是不是很烦!别烦。。。
我们还可以这样,小冬子现提供一下思路供参考,大家有新的方法可以探讨。谢谢!
我们可以用interceptor来实现,在Action中,我们一ModerDriven的方式来接受参数,因为我们要修改对象的500个属性,所以在Aciton中接受到的参数就有500个那么这个时候这个对象的另外500个属性的值就为空了,因为在得到这个对象的时候是用getModel方法得到的,所以我们可以在页面的500个参数传递过来之前,把这个对象先查询出来然后页面的参数传递过来之后会覆盖掉对象里原来的值而剩下的500个属性的值就保存在对象中了,这个时候在进行更新就可以了。是不是很棒!
使用struts2拦截器轻松更新对象多个属性,方法如下:
1、定义action
package net.rytong.action; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import net.rytong.entity.User; import net.rytong.service.IUserService; import com.opensymphony.xwork2.ActionSupport; import com.opensymphony.xwork2.ModelDriven; @Component /** * zhou_dong * 更新用户的action */ public class UserUpdateAction extends ActionSupport implements ModelDriven{ private static final long serialVersionUID = 1L; @Autowired private IUserService userService; private User user; //先从 数据库查出对象 public void preUpdate(Integer id) { user = userService.getById(id); } //model模型底层更改user public User getModel() { return user; } //更新到数据库 public String update() { userService.update(user); return "success"; } }
2、定义拦截器
package net.rytong.interceptor;
import net.rytong.action.UserUpdateAction;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;
/**
*
* @author zhou_dong
* 自己定义的拦截器,在model模型拦截器前配置
*/
public class MyInterceptor extends AbstractInterceptor {
private static final long serialVersionUID = 1L;
@Override
public String intercept(ActionInvocation invocation) throws Exception {
//拦截更新方法
if("update".equalsIgnoreCase(invocation.getProxy().getMethod()))
{
//拦截更新用户的action
if(invocation.getAction() instanceof UserUpdateAction)
{
UserUpdateAction action = (UserUpdateAction) invocation.getAction();
String[] ids = (String[]) invocation.getInvocationContext().getParameters().get("id");
action.preUpdate(Integer.parseInt(ids[0]));
}
}
return invocation.invoke();
}
}
3、struts.xml文件中的配置
dojo\..*,^struts\..* input,back,cancel,browse input,back,cancel,browse
喜欢了就赞一个!谢谢!