Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Hibernate SpringMVC表单更新对象_Hibernate_Spring Mvc - Fatal编程技术网

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();  
}