2013-04-25 18 views
0

我有一個三個按鈕一個用於保存,更新和查詢的表單,但我想知道在服務器端用戶點擊了什麼按鈕。我嘗試使用request.getParameter(「action」)和request.getAttribute(「action」),但它們都返回null。有什麼辦法可以在服務器上獲得這個,也許我可以在會話中存儲「操作」值?如果是這樣,我如何創建和存儲會話變量?春天MVC HttpServletRequest請求:哪個按鈕點擊

代碼

<button class="btn" value="save" id="action"></button> 

<button class="btn" value="update" id="action"></button> 

<button class="btn" value="query" id="action"></button> 

基本上我試圖避免轉播到服務器。我知道,我想使用POST /重定向/ GET模式,但是我的方法不會支持重定向,即使更改和表單有錯誤,我將無法返回服務器驗證。

控制器

@RequestMapping(value = "crime_registration_save.htm", method = RequestMethod.POST) 
    public ModelAndView handleSave(@Valid @ModelAttribute Crime crime,HttpServletRequest request, 
      HttpServletResponse response,BindingResult result, ModelMap m, Model model) throws Exception { 


     String action = request.getParameter("action"); 

    logger.info("The requested action is "+ action); 
     if (result.hasErrors()) { 

      logger.debug("Has Errors In crime_registration_save"); 
      model.addAttribute("dbcriminals", myCriminalList); 
      model.addAttribute("dbvictims", myVictimList); 
      model.addAttribute("status", myStatusList); 
      model.addAttribute("crimeCategory", myCrimeCategoryList); 
      model.addAttribute("crimeLevel", myCrimeLevelList); 
      model.addAttribute("officers", myOfficerList); 

      model.addAttribute("victimList", crime.getVictims()); 
      model.addAttribute("criminalList", crime.getCriminals()); 

      model.addAttribute("crimeTypeList", 
        crimeTypeManager.getCrimeTypeList(crime.getOffenceCatId())); 
      model.addAttribute("icon", "ui-icon ui-icon-circle-close"); 
      model.addAttribute("results", "Error: Unable to Save Record!"); 

      return new ModelAndView("crime_registration"); 
     } 
     logger.debug("No errors going to preform save"); 

     int crimeRecNo; 

     crimeRecNo = crimeManager.saveCrime(crime); 

     model.addAttribute("dbcriminals", myCriminalList); 
     model.addAttribute("dbvictims", myVictimList); 
     model.addAttribute("status", myStatusList); 
     model.addAttribute("crimeCategory", myCrimeCategoryList); 
     model.addAttribute("crimeLevel", myCrimeLevelList); 
     model.addAttribute("officers", myOfficerList); 
     model.addAttribute("save", "disabled"); 
     model.addAttribute("victimList", crime.getVictims()); 
     model.addAttribute("criminalList", crime.getCriminals()); 

     model.addAttribute("crimeTypeList", 
       crimeTypeManager.getCrimeTypeList(crime.getOffenceCatId())); 
     model.addAttribute("crimeRecNo", crimeRecNo); 
     model.addAttribute("crimeRecordNoStatus", "true"); 
     model.addAttribute("icon", "ui-icon ui-icon-circle-check"); 
     model.addAttribute("results", "Record Was Saved"); 



     return new ModelAndView("crime_registration"); 
    } 

jQuery的

function submitPage(urlMapping,method,action) { 
     alert(urlMapping); 
     document.getElementById("crime_registration").action = urlMapping; 
     document.getElementById("crime_registration").target = "_self"; 
     document.getElementById("crime_registration").method = method; 
     document.getElementById("crime_registration").submit(); 
     $('#action').val(action); 

     alert($('#action').val()); 
     return false; 
    } 
+0

分享你的表單 – 2013-04-25 02:29:38

回答

1

這裏的解決方案是有一個名爲action的隱藏變量,點擊按鈕後,您可以用點擊按鈕的值更新隱藏變量,然後提交表單。

例:

<form action="" method="post" name="myform"> 
    <input type="hidden" name="action" /> 

    .... 

    <button class="btn" value="save" id="action" onclick="submitForm(this)"></button> 
    <button class="btn" value="update" id="action" onclick="submitForm(this)"></button> 
    <button class="btn" value="query" id="action" onclick="submitForm(this)"></button> 
</form> 

然後

<script> 

    function submitForm(btn){ 
     var frm = document.myform; 

     frm.action.value = btn.value; 
     frm.submit(); 
     return false; 

    } 

</script> 
+0

即使單擊瀏覽器重新加載按鈕並重新提交帖子,隱藏字段是否會獲得其值? – devdar 2013-04-25 02:36:29

+0

是的,它會重新加載按鈕將重新提交POST,其中包括行動也 – 2013-04-25 02:38:50

+0

我這樣做,我也設置了行動的價值,我顯示了$('#行動')的警報。val()它顯示值集準確地說,但是當我做一個request.getParameter(「行動」)它的空白沒有顯示 – devdar 2013-04-25 02:52:47

2

表格東西都沒有請求屬性,它們的參數。

使用提交,給它一個名稱,並通過該名稱檢索參數。

<input type="submit" class="btn" value="save" name="action" /> 

String button = request.getParameter("action"); 

如果它不一種形式,你需要一些JavaScript,但你的問題暗示它。

+0

我不能使用提交按鈕,因爲我用java腳本發佈表單 – devdar 2013-04-25 02:35:04

+0

@dev_darin這沒有任何意義;你可以用提交元素來做任何你正在做的按鈕元素。 – 2013-04-25 02:38:52

+1

@dev_darin代替按鈕點擊事件,您可以添加表單提交處理程序來處理您的案例 – 2013-04-25 02:39:36

1

所有你需要添加到您的按鈕是屬性類型= 「提交」,屬性名= 「參數名稱」。然後,按鈕標籤就像提交類型的輸入一樣,其優點是值可以不同於顯示文本或您在按鈕標籤中放置的任何內容。

如果你想用ajax提交你的表單,我現在會使用jquery ajaxform插件來處理這個問題。