2017-07-28 47 views
0

當頁面加載時,它填充表格。JSP - AJAX和控制器獲取對象,但不更新模型Attriibute

@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"> 

我的問題是「用戶」的屬性保持爲空,而不是更新。 請注意,在調用調用controller的ajax之後,userService.findById會有結果。 我錯過了什麼?

謝謝。

UPDATE

我想我真的需要使用Ajax調用後的反應在我的jsp更新的ModelAttribute = 「用戶」。 因爲我使用的「用戶」屬性並將其綁定到字段和錯誤

<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> 

如果我將直接設置輸入字段,我有一個錯誤,如果形式與錯誤提交(例如空字段)

重度:Servlet.service()進行的servlet [調度]在上下文中與路徑[/ SSSBackEnd]拋出異常[java.lang.IllegalStateException:既不BindingResult也不對豆名「用戶」可作爲請求純目標對象屬性]與根本原因 java.lang.IllegalStateException:既沒有BindingResult也沒有用於bean名稱的普通目標對象'us er'作爲請求屬性 在org.springframework.web.servlet.support.BindStatus。(BindStatus.java:144) at org.springframework.web.servlet.tags.form.AbstractDataBoundFormElementTag.getBindStatus(AbstractDataBoundFormElementTag.java:168 ) 在org.springframework.web.servlet.tags.form.AbstractDataBoundFormElementTag.getPropertyPath(AbstractDataBoundFormElementTag.java:188) 在org.springframework.web.servlet.tags.form.AbstractDataBoundFormElementTag.getName(AbstractDataBoundFormElementTag.java:154) 在org.springframework.web.servlet.tags.form.AbstractDataBoundFormElementTag.writeDefaultAttributes(AbstractDataBoundFormElementTag.java:117) 在org.springframework.web.servlet.tags.form.AbstractHtmlElementTag.writeDefaultAttributes(AbstractHtmlElementTag.java:422)

+0

您的要求mappging處理Ajax調用返回一個字符串,什麼意味着它是一個觀點,什麼手段春天,使用您的視圖解析器配置,會轉化爲HTML代碼。當使用ajax時,您應該使用@ResponseBody並返回一個json對象,使用javascript動態更新前端。 – alfcope

+0

謝謝!有想法。但是當我得到一個json對象時,我如何使用它來更新modelAttribute =「user」? 請注意,它是另一個模態的jsp。 – dens

+0

爲了進一步解釋,例如我有A.jsp,它具有ajax調用和json對象的響應。我需要在我的B.jsp這是一個模式,這將是我從ajax調用得到響應後顯示。 成功:功能(響應){// 響應現在是JSON對象 //我將顯示模態, $( '#myModal')模態( '顯示');。 //但這模態內,我有 <形式:形式方法=「POST」的ModelAttribute =「用戶」類=「形橫」> 我想用我得到 – dens

回答

0

我所做的是設置控制器中的模型屬性,並讓它返回jsp名稱本身(訪問)。(沒有更改)

然後在Ajax響應中,我添加了使用此代碼訪問html的更新。

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

好吧,你想在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 
} 
+0

我做了。我現在有一個ajax響應,但我怎麼能使用響應來更新我的模態modelAttribute =「user」? – dens

+0

我試過,$('#user')。val(response);和<%session.setAttribute(「user」,response);%>但沒有運氣 – dens

+0

創建一個會話並放入它。 – akuma8

相關問題