我有三个表User,Role和UserRoleRelationships(多对多连接表)。在我的服务中,编辑用户和保存相关角色没有问题,但我无法在控制器中执行此操作。
服务中的预期行为:
Hibernate: update dbo.Users set Username=?, Password=?, Email=?, Workphone=?, Privatephone=?, FullName=? where UserId=?
Hibernate: update dbo.UserRoles set Role=? where RoleId=?
Hibernate: update dbo.UserRoles set Role=? where RoleId=?
但控制器中的行为是:
Hibernate: update dbo.Users set Username=?, Password=?, Email=?, Workphone=?, Privatephone=?, FullName=? where UserId=?
Hibernate: delete from UserRoleRelationships where UserId=?
我的控制器如下:
@RequestMapping(value = "/usermanagement/edit/{userId}")
public ModelAndView initUpdateForm(@PathVariable String userId, ModelMap model) {
model.addAttribute("user", iwUserManagementService.getUser(Integer.valueOf(userId)));
return new ModelAndView(viewName, model);
}
@RequestMapping(value = "/usermanagement/edit/{userId}", method = RequestMethod.POST)
public ModelAndView processUpdateSubmit(@ModelAttribute("user") IWUser iwUser,
BindingResult result, SessionStatus status){
iwUserManagementService.saveOrUpdate(iwUser);
status.setComplete();
return new ModelAndView("redirect:/usermanagement", new ModelMap("user", iwUser));
}
我的web.xml的一部分:
<filter>
<filter-name>hibernateFilter</filter-name>
<filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class>
<init-param>
<param-name>singleSession</param-name>
<param-value>false</param-value>
</init-param>
<init-param>
<param-name>flushMode</param-name>
<param-value>AUTO</param-value>
</init-param>
<init-param>
<param-name>sessionFactoryBeanName</param-name>
<param-value>sessionFactory</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>hibernateFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
对我来说,看起来processUpdateSubmit()中的用户模型不返回角色,只返回已发布的项目。我怎样才能让它返回角色呢?
谢谢:)
答案 0 :(得分:0)
从评论中可以看出角色“在流程函数中消失了”。
它表示您的表单或处理请求的方式存在问题。
我认为你有两种选择,取决于你想做什么:
如果您不想更改用户角色(在此表单中),请使用用户数据转移对象而不是processUpdateSubmit
中的角色。然后,您只需要加载用户并使用dto中的数据进行更新。
如果您想更改用户角色(在此表单中),那么您需要找到错误:
user.setRole()
方法并在调用堆栈中向后移动。答案 1 :(得分:0)
我自己修改了@SessionAttributes(types = IWUser.class):
@Controller
@SessionAttributes(types = IWUser.class)
public class UserUpdateController { /* implemenation */ }