JSP - AJAX 并且 Controller 获取对象但不更新 modelAttriibute

JSP - AJAX and Controller gets the Object but does not update modelAttriibute

页面加载时,它会填充 table。

@RequestMapping(value = { "/access" }, method = RequestMethod.GET)
public String access(ModelMap model) {

    List<UserDTO> users = userService.findAllUsers();
    model.addAttribute("users", users);

    UserDTO user = new UserDTO();
    model.addAttribute("user", user);

    return "access";
}

当用户在某一行上单击“编辑”时,将调用ajax。

function getDetails(id) {
    $.ajax({
        type : "get",
        data : {id: id},
        url : "get-details",
        cache : false,
        success : function(response) {
            // code here
        },
    });
}

在控制器上,它将获得具有提供的 id 的 UserDTO。

@RequestMapping(value = { "/get-details" }, method = RequestMethod.GET)
@ResponseBody
public String getDetails(@RequestParam("id") String id, ModelMap model) {
    UserDTO user = userService.findById(id);
    model.addAttribute("user", user);

    return access; //'access' is the current page
}

在我的 jsp 我有...

<form:form method="POST" modelAttribute="user" class="form-horizontal">

我的问题是 "user" 的属性仍然为空且未更新。 请注意,在调用 ajax 调用控制器后, userService.findById 有结果。 我错过了什么?

谢谢。

更新

我认为我确实需要使用 ajax 调用后的响应更新 jsp 中的 modelAttribute="user"。 因为我正在使用 "user" 属性并将其绑定到字段和错误

<form:form method="POST" modelAttribute="user" class="form-horizontal">
        <div class="modal-content">
            <div class="modal-body">
                <!-- Default panel contents -->
                <form:input type="hidden" path="id" id="id" />

                <div class="row">
                    <div class="form-group col-md-14">
                        <label class="col-md-3 control-label" for="firstName">First
                            Name</label>
                        <div class="col-md-7">
                            <form:input type="text" path="firstName" id="firstName"
                                class="form-control input-sm" />
                            <div class="has-error">
                                <form:errors path="firstName" class="help-inline" />
                            </div>
                        </div>
                    </div>
                </div>
            </div>
        </div>
    </form:form>

如果我直接设置输入字段,如果提交的表单有错误(例如空字段),我会遇到错误

SEVERE: Servlet.service() for servlet [dispatcher] in context with path [/SSSBackEnd] threw exception [java.lang.IllegalStateException: Neither BindingResult nor plain target object for bean name 'user' available as request attribute] with root cause java.lang.IllegalStateException: Neither BindingResult nor plain target object for bean name 'user' available as request attribute at org.springframework.web.servlet.support.BindStatus.(BindStatus.java:144) at org.springframework.web.servlet.tags.form.AbstractDataBoundFormElementTag.getBindStatus(AbstractDataBoundFormElementTag.java:168) at org.springframework.web.servlet.tags.form.AbstractDataBoundFormElementTag.getPropertyPath(AbstractDataBoundFormElementTag.java:188) at org.springframework.web.servlet.tags.form.AbstractDataBoundFormElementTag.getName(AbstractDataBoundFormElementTag.java:154) at org.springframework.web.servlet.tags.form.AbstractDataBoundFormElementTag.writeDefaultAttributes(AbstractDataBoundFormElementTag.java:117) at org.springframework.web.servlet.tags.form.AbstractHtmlElementTag.writeDefaultAttributes(AbstractHtmlElementTag.java:422)

好的,你想在 success: function(response){ } 中获取你的对象,所以你应该这样做:

@RequestMapping(value = { "/get-details" }, method = RequestMethod.GET)
@ResponseBody
public UserDTO getDetails(@RequestParam("id") String id, ModelMap model) {
    UserDTO user = userService.findById(id);
  return user; //return the object not the view name
}

在你的 ajax 部分:

success: function(response){
 //response = UserDTO
 alert(response.name); //for example 
}

我所做的是在控制器中设置模型属性并让它 return jsp 名称本身(访问)。 (未进行任何更改)

然后在 Ajax 响应中,我添加了一个更新以使用此代码访问 html。

$('#accessid').html(response);