[英]How to pass textbox value which has the data to spring MVC controller?
[英]How to pass textbox values and what was the action to spring mvc controller?
我正在從事Spring MVC控制器項目。
INSERT
。 單擊INSERT按鈕后,我將在INSERT按鈕下面顯示三個文本框。 第一個文本框是datacenter
,第二個文本框是node
,第三個文本框是data
。 UPDATE
。 單擊“更新”按鈕后,我將在“更新”按鈕正下方的三個文本框上方顯示相同的內容。 DELETE
。 單擊刪除按鈕后,我僅在刪除按鈕下方顯示一個文本框。 在這個文本框中將是node
。 PROCESS
。 單擊“過程”按鈕后,我將在“過程”按鈕下方顯示四個文本框。 在此第一個文本框將是datacenter
,第二個文本框將是node
,第三個文本框將是data
,第四個文本框將是conf
最后,我將按下提交按鈕。
這是我的jsfiddle ,其中包含我上面討論的所有內容。
問題陳述:-
現在,我需要做的是,假設我先單擊“ Insert
按鈕,它將在“插入”按鈕下面提供三個文本框,然后在這三個文本框中鍵入一些值,然后單擊“ Submit
按鈕,該按鈕將傳遞所有這三個文本框值以及我對控制器方法testOperations
操作(意味着是INSERT或UPDATE或DELETE或PROCESS)。 因此,在這種情況下,如果我在數據中心中鍵入dc1
,在節點中輸入hello
,在數據中輸入world
,那么它應該將所有這三個值傳遞給我的控制器方法,但還應該將conf
值作為null bcoz傳遞給該文本框(對於“ Insert
按鈕不存在)因此,當我們按下Submit按鈕時,它將conf值作為null傳遞給控制器方法。
同樣,如果單擊“刪除”按鈕,則它將僅在“刪除”按鈕下方顯示一個文本框,一旦單擊“提交”按鈕,則它應將“刪除”值作為操作傳遞,數據中心值應為null,節點值作為我們鍵入的實際值在框中,數據值也應該為null,而conf值也應該為null。對於其他情況也是如此。
以下是我在Controller代碼中的方法-
@RequestMapping(value = "testOperation", method = RequestMethod.GET)
public Map<String, String> testOperation() {
final Map<String, String> model = new LinkedHashMap<String, String>();
return model;
}
@RequestMapping(value = "testOperation", method = RequestMethod.POST)
public Map<String, String> testOperations(@RequestParam String action,
@RequestParam String datacenter,
@RequestParam String node,
@RequestParam String data,
@RequestParam String conf) {
final Map<String, String> model = new LinkedHashMap<String, String>();
System.out.println(action);
System.out.println(datacenter);
System.out.println(node);
System.out.println(data);
System.out.println(conf);
return model;
}
但是無論如何,只要我在輸入一些值后按下提交按鈕,就會給我一個異常,例如Bad Request Exception。而且我知道為什么嗎? 因為假定在這三個文本框中鍵入值后為Insert
情況,所以我按了Submit按鈕,則未設置conf值,並且我的控制器方法使用conf參數,因此這是它引發異常的原因。為了解決此問題,我可以刪除conf參數,但是對於Process案例,我需要它。
所以有什么辦法,我可以為那些不需要某些按鈕的文本框傳遞空值來避免這個問題?
您有兩種選擇來解決您的問題。
選項1)不需要所有對所有三個動作都必需的參數,即:
@RequestParam(required = false,defaultValue = null)字符串配置
如果將“ required = false”添加到所有非強制性參數,則不會獲得異常
選項2)為每個操作設置不同的控制器方法,並使每個方法僅采用指定操作所需的參數:
@RequestMapping(value = "insertOperation", method = RequestMethod.POST)
public Map<String, String> insertOperation(
@RequestParam String action,
@RequestParam String datacenter,
@RequestParam String node,
@RequestParam String data
) {}
和:
@RequestMapping(value = "updateOperation", method = RequestMethod.POST)
public Map<String, String> updateOperation(@RequestParam String action,
@RequestParam String datacenter,
@RequestParam String node,
@RequestParam String data,
@RequestParam String conf,
) {}
祝好運!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.