Java 如何传递文本框值,以及对SpringMVC控制器的操作是什么?

Java 如何传递文本框值,以及对SpringMVC控制器的操作是什么?,java,javascript,jquery,html,jsp,Java,Javascript,Jquery,Html,Jsp,我正在从事一个SpringMVC控制器项目 第一个按钮是插入。我一单击“插入”按钮,就会在“插入”按钮下方显示三个文本框。第一个文本框是数据中心,第二个文本框是节点,第三个文本框是数据。 第二个按钮是更新。只要我点击更新按钮,我就会在更新按钮下面显示上面三个相同的文本框。 第三个按钮是删除。单击“删除”按钮后,我只会在“删除”按钮下方显示一个文本框。在此文本框中,将显示节点。 第四个按钮是进程。我一单击“处理”按钮,就会在“处理”按钮下方显示四个文本框。第一个文本框是数据中心,第二个文本框是节点

我正在从事一个SpringMVC控制器项目

第一个按钮是插入。我一单击“插入”按钮,就会在“插入”按钮下方显示三个文本框。第一个文本框是数据中心,第二个文本框是节点,第三个文本框是数据。 第二个按钮是更新。只要我点击更新按钮,我就会在更新按钮下面显示上面三个相同的文本框。 第三个按钮是删除。单击“删除”按钮后,我只会在“删除”按钮下方显示一个文本框。在此文本框中,将显示节点。 第四个按钮是进程。我一单击“处理”按钮,就会在“处理”按钮下方显示四个文本框。第一个文本框是数据中心,第二个文本框是节点,第三个文本框是数据,第四个文本框是配置 最后是我要按下的提交按钮

这是我的书,里面有我上面提到的一切

问题陈述:-

现在我需要做的是,假设我先单击Insert按钮,它将在Insert按钮下方提供三个文本框,然后在这三个文本框中键入一些值,我将单击Submit按钮,该按钮将传递所有这三个文本框值以及我所做的操作,即插入、更新、删除或处理控制器方法testOperations。对于这种情况,如果我在数据中心输入dc1,在节点中输入hello,在数据中输入world,那么它应该将所有这三个值传递给我的控制器方法,但它也应该将conf值传递为null bcoz。这个文本框不在插入按钮的位置,所以当我们按下submit按钮时,它应该将conf值传递为null给控制器方法

类似地,如果我单击Delete按钮,那么它将在Delete按钮下方仅显示一个文本框,一旦我单击Submit按钮,它将作为操作传递删除值,数据中心值应为null,节点值作为我们在框中键入的实际值,数据值也应为null,conf值应为null。。其他人也是如此

下面是我在控制器代码中的方法-

   @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;
    }
但不知何故,每当我在键入一些值后按submit按钮时,它都会将异常作为坏请求异常提供给我。。我知道原因吗?因为假设在这三个文本框中键入值后,插入案例中,我按下了Submit按钮,然后没有设置conf值,并且我的控制器方法接受conf参数,这就是它抛出异常的原因。。为了解决这个问题,我可以删除conf参数,但是对于流程案例,我需要它


所以,有没有办法,我可以将某些按钮不需要的文本框的空值传递给控制器以避免此问题?

您有两个选项来解决问题

选项1:对于所有三个操作,非强制性的所有参数均应为非必需参数,即:

@RequestParamrequired=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
    ) {}
以及:


祝你好运

但我们可以将这些表单中的默认值设置为null,以便插入、更新、删除和处理?对于那些我们不需要的文本框,对吗?当控制器没有收到required=false参数时,它会自动为null。我不能让required=false。。假设我单击了进程按钮,为此我将在conf文本框中输入一些值,然后按下Submit按钮。。因此,在这种情况下,如果我将conf设置为required=false,它将具有null值。如果您不能使用required=false,请拆分控制器方法,以便每个操作都将到达另一个方法,如我的第二个选项中所示。我明白了。。没有别的办法了?这意味着在表单本身中将我们不需要的文本框的默认值设置为null?
@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,
                                                  ) {}