2015-06-23 27 views
0

我通過AJAX POST提交了一個,但是我的@ModelAttribute值失去了引用,導致應用程序崩潰。這是我的請求(使用合金UI,但該請求也很一般):AJAX POST失去對模型屬性的引用 - Spring

Y.io.request(launches the ajax request 
    '/userEditForm/' + userID, //request string which calls the controller 
    { 
     method: 'GET', 
     on: { 
      success: function(e) { 
       showEditForm(); 
      }, 
      failure: function(e) { 
       alert(e.error.message); 
      } 
    } 
}); 

我有一個請求設置返回用戶形式:

@RequestMapping(value = "/userEditForm/{id}", method = RequestMethod.GET) 
public ModelAndView getUserEditForm(@PathVariable Long id){ 
    ModelAndView mav = new ModelAndView("user");//user.html 
    User user = userRepo.findOne(id); 
    mav.addObject("user", user); 
    return mav; 
} 

在這一點上我所有的模型屬性都填充值是,

{user=User [getId()=123, getName()=Bob, getAddress()=54 Little Billy Lane, getPhone()=8457955555, getManager()=Jim Jimson]}

的形式,只有姓名,地址和電話號碼字段回來,因爲我不希望用戶更新anothe [R用戶ID或經理

<form action="/saveUser/{id}" method="post"> 
    <input type="text" name="name"><br> 
    <input type="text" name="address"><br> 
    <input type="text" name="phone"><br> 
</form> 

在提交我的saveUser @Controller被稱爲

@RequestMapping(value = "/saveUser/{id}", method = RequestMethod.POST) 
    public String saveUser(@ModelAttribute("User") User user, @PathVariable Long id, Model model) { 
     user = userRepo.findOne(id); 
     model.addAttribute("user", user); 
     userRepo.save(user); 
     return "success"; 
    } 

但是在提交我的模型僅持有該更新表單上的值,不包括休息

{user=User [getId()=0, getName()=Bob, getAddress()=42 Wallaby Way, getPhone()=7563434444, getManager()=null}

沒有填充任何預定義的字段,由於用戶標識不能爲空或0在子輸入上引發錯誤ñ。我正在尋找包括我的表單提交時更新和非更新的所有字段,但我不太清楚如何去做這件事。

到目前爲止,我已閱讀過有關Flash和重定向屬性,這可能是我需要的。有什麼想法嗎?

編輯:正如尼爾麥圭根解釋,我應該使用@SessionAttributes。我需要的是模型屬性,可以在整個會話中保持訪問,而不僅僅是一個GET或POST。這可以通過會話屬性完成。

+0

'<形式行動= 「/ saveUser(編號)」 方法= 「POST」>


''你在'/ saveUser'之後是否缺少'/'。它應該是'/ saveUser/{id}'? –

+0

只是一個錯字我的斜線在那裏,但謝謝 –

回答

1

如果您只是部分更新記錄,唯一正確且安全的方法是將其放入會話中。使用@SessionAttributes(它剛好在控制器上方)。

@SessionAttributes("user") 

然後,您不需要在saveUser方法來從數據庫用戶。

+0

@SessionAttributes正是我要找的謝謝 –

0

不知道,如果它是在這裏你結束一個錯字,

<form action="/saveUser{id}" method="post"> 
    <input type="text" name="name"><br> 
    <input type="text" name="address"><br> 
    <input type="text" name="phone"><br> 
</form> 

你是//saveUser失蹤。難道不是/saveUser/{id}

+0

只是一個錯字,我的控制器被稱爲罰款/ saveUser/{id},但你是對的 –

+0

酷!讓我們從另一個角度思考然後:D –