我正在开发一个Spring MVC控制器项目。
INSERT
。单击INSERT按钮后,我将在INSERT按钮下方显示三个文本框。第一个文本框为datacenter
,第二个文本框为node
,第三个文本框为data
。UPDATE
。只要我点击UPDATE按钮,我就会在UPDATE按钮下方的三个文本框中显示相同内容。DELETE
。单击DELETE按钮后,我只在DELETE按钮下方显示一个文本框。在此文本框中将显示node
。PROCESS
。单击PROCESS按钮后,我将在PROCESS按钮下方显示四个文本框。在第一个文本框中将是datacenter
,第二个文本框将是node
,第三个文本框将是data
,第四个文本框将是conf
最后我会按下提交按钮。
这是我的jsfiddle,其中包含了我上面谈到的所有内容。
问题陈述: -
现在我需要做的是,假设我先点击Insert
按钮,它会在Insert按钮下方提供三个文本框,然后在这三个文本框中输入一些值后,我会点击Submit
按钮应该将所有这三个文本框值以及我执行的操作(意味着它是INSERT或UPDATE或DELETE或PROCESS)传递给我的控制器方法testOperations
。因此,对于这种情况,如果我在数据中心输入dc1
,在节点中输入hello
,在数据中输入world
,那么它应该将所有这三个值传递给我的控制器方法,但它也应该通过{ {1}}值为null bcoz此文本框不在conf
按钮,因此当我们按下提交按钮时,它应该将conf值作为null传递给控制器方法。
同样如果我单击“删除”按钮,那么它将只显示“删除”按钮下方的一个文本框,一旦我单击“提交”按钮,则应将“删除”值作为操作传递,数据中心值应为空,节点值为实际我们在框中键入的值,数据值也应为null,conf值应为null。同样适用于其他人。
以下是我在Controller代码中的方法 -
Insert
但不知何故,每当我在输入一些值后按下提交按钮,它就会给我异常作为Bad Request Exception ..而且我知道原因是什么?因为在这三个文本框中键入值后假设为 @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;
}
,我按下了提交按钮,然后没有设置conf值,我的控制器方法采用conf参数,这就是它抛出异常的原因..并且解决这个问题,我可以删除conf参数但是对于Process case,我需要它..
那么有什么办法,我可以为那些我不需要控制器按钮的文本框传递空值来避免这个问题吗?
答案 0 :(得分:0)
您有两种方法可以解决您的问题。
选项1)所有三个动作不是强制性的所有参数都应是非必需的,即:
@RequestParam(required = false,defaultValue = null)String conf
如果向所有非强制性参数添加“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,
) {}
祝你好运!