Hibernate SpringMVC表单更新对象
我尝试通过表单更新对象,我有两个控制器:Hibernate SpringMVC表单更新对象,hibernate,spring-mvc,Hibernate,Spring Mvc,我尝试通过表单更新对象,我有两个控制器: @RequestMapping(value = "/modifyUser{id}", method = RequestMethod.GET) public String modifyUser(@PathVariable("id") int userId, ModelMap map) { UserDetails user = userService.findById(userId); List<CompanyDetails>
@RequestMapping(value = "/modifyUser{id}", method = RequestMethod.GET)
public String modifyUser(@PathVariable("id") int userId, ModelMap map) {
UserDetails user = userService.findById(userId);
List<CompanyDetails> companyDetailsList = companyService.getAllExceptUsers(userId);
map.addAttribute("userDetails", user);
map.addAttribute("companiesList",companyDetailsList);
return "admin/modify_user";
}
@RequestMapping(value = "/modifyUser", method = RequestMethod.POST)
public String modifyUser(@Valid @ModelAttribute("userDetails") UserDetails userDetails,
BindingResult result, RedirectAttributes redirectAttributes,
@RequestParam("company_id")String companyId,ModelMap map) {
if (!userService.isPhoneNumbersListValid(userDetails.getPhoneNumbers())){
result.rejectValue("phoneNumbers", "userDetails.phoneNumbersList.error");
}
if(!userDetails.getPasswordConfirmation().equals(userDetails.getPassword())){
result.rejectValue("passwordConfirmation","userDetails.passwordConfirmation.error");
}
if("default".equals(userDetails.getCountry())){
result.rejectValue("country","userDetails.country.error");
}
if (result.hasErrors()){
List<CompanyDetails> companyDetailsList = companyService.getAllExceptUsers(userDetails.getId());
map.addAttribute("companiesList",companyDetailsList);
return "admin/modify_user";
}
logger.warn("***********Updated user ID:"+userDetails.getId()+" and companies size: "+userDetails.getUserCompanies().size());
CompanyDetails companyDetails = companyService.getCompanyById(Integer.parseInt(companyId));
userDetails.setEnabled(true);
if (userService.update(userDetails,companyDetails)) {
redirectAttributes.addFlashAttribute("userModifyStatus", true);
} else {
redirectAttributes.addFlashAttribute("userModifyStatus", false);
}
return "redirect:modifyUser" + userDetails.getId() + ".html";
}
以及我的提交表格:
<form:form method="post" action="modifyUser.html" commandName="userDetails">
<form:hidden path="id"/>
<form:label path="firstName"><spring:message code="addUser.label.firstName"/></form:label>
<form:input type="text" path="firstName"/>
<form:errors path="firstName" cssClass="form-errors"/>
<form:label path="legalName"><spring:message code="addUser.label.legalName"/></form:label>
<form:input type="text" path="legalName"/>
<form:errors path="legalName" cssClass="form-errors"/>
<form:label path="login"><spring:message code="addUser.label.login"/></form:label>
<form:input type="text" path="login"/>
<form:errors path="login" cssClass="form-errors"/>
<form:label path="password"><spring:message code="addUser.label.password"/></form:label>
<form:input type="password" path="password"/>
<form:errors path="password" cssClass="form-errors"/>
<form:label path="passwordConfirmation"><spring:message code="addUser.label.confirmPassword"/></form:label>
<form:input type="password" path="passwordConfirmation"/>
<form:errors path="passwordConfirmation" cssClass="form-errors"/>
<form:label path="country"><spring:message code="addUser.label.country"/></form:label>
<form:select class="iso-country-select" path="country">
<form:option value="default"><spring:message code="addUser.label.selectCountry"/></form:option>
</form:select>
<form:errors path="country" cssClass="form-errors"/>
<label for="select-companies"><spring:message code="assignUser.label.companies"/> </label>
<select id="select-companies" name="company_id">
<option value="default"><spring:message code="searchUser.label.selectCompany"/></option>
<c:forEach items="${companiesList}" var="company">
<option value="${company.id}">${company.name}</option>
</c:forEach>
</select>
<div class="phone-numbers">
<form:label path="phoneNumbers"><spring:message code="addUser.label.phoneNumber"/></form:label>
<p class="added-input-text">
<c:forEach items="${userDetails.phoneNumbers}" var="phoneNumber" varStatus="loop">
<form:input type="text" path="phoneNumbers[${loop.index}]"/>
</c:forEach>
<a href="#" class="add"><img src="../static/img/add.png"/></a>
<p/>
<form:errors path="phoneNumbers" cssClass="form-errors"/>
</div>
<form:label path="legalAddress"><spring:message code="addUser.label.legalAddress"/></form:label>
<form:textarea path="legalAddress"/>
<form:errors path="legalAddress" cssClass="form-errors"/>
<form:label path="role"><spring:message code="addUser.label.role"/></form:label>
<form:select path="role">
<form:option value="ROLE_USER"><spring:message code="addUser.label.role.external"/></form:option>
<form:option value="ROLE_ADMIN"><spring:message code="addUser.label.role.internal"/></form:option>
</form:select>
<input type="submit" value="<spring:message code="modifyUser.label.submit"/>"/>
</form:form>
${company.name}
我能解决这个问题吗?谢谢。你是说
org.springframework.security.core.UserDetails
中的UserDetails
在这种情况下,UserDetails中GrantedAuthority的集合没有setter,因此spring mvc无法为此设置值
public interface UserDetails extends Serializable {
Collection<GrantedAuthority> getAuthorities();
....
}
/* it does not have any setter */
public interface GrantedAuthority extends Serializable {
String getAuthority();
}
public接口UserDetails扩展了Serializable{
收集权限();
....
}
/*它没有任何设置器*/
公共接口授权扩展可序列化{
字符串getAuthority();
}
请发布您的自定义对象并提交表单。我的问题现在是最新的。
public interface UserDetails extends Serializable {
Collection<GrantedAuthority> getAuthorities();
....
}
/* it does not have any setter */
public interface GrantedAuthority extends Serializable {
String getAuthority();
}