[英]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.