不建议把po直接应用于表现层,强烈建议把po和vo分开使用
UserAction.java
/** 保存 */
public ActionForward save(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
UserPo usrPo=userService.getUserByUserId(userId);
LazyValidatorForm stationForm = (LazyValidatorForm)form;
/** ====================(1)==================== */
userPo.setAccount=(String)form.get("account");
userPo.setUserName=(String)form.get("userName");
userPo.setSex=(String)form.get("sex");
userPo.setPassword=(String)form.get("password");
userPo.setTel=(String)form.get("tel");
/** 判断用户帐号是否已存在 */
if(isExsit(userPo.getAccount())){
/** 存在则不保存 */
}else{
/** 不存在保存 */
userService.saveUser(userPo);
}
}
请注意上面的代码是否会出现问题呢?
我们来分析一下:
当用户帐号存在时按程序的逻辑是不会保存你所更改的内容的,但是因为(1)处已先将po的相关属性值set成了最新表单form中的内容了
,此时的po是调用服务getUserByUserId(userId)则它是一个持久对象,所以它是具有状态,即使按上面程序的逻辑并没有调用保存用户的方法,
但它的相关属性也会被更改.
原国很简单就是你对一个持久的对象(具有状态)进行了操作,所以一定要小心使用!