【问题标题】:How to pass textbox values and what was the action to spring mvc controller?如何传递文本框值以及 spring mvc 控制器的操作是什么?
【发布时间】:2014-03-08 08:44:55
【问题描述】:

我正在开发一个 Spring MVC 控制器项目。

  • 第一个按钮是INSERT。当我单击 INSERT 按钮时,我会在 INSERT 按钮下方显示三个文本框。第一个文本框是datacenter,第二个文本框是node,第三个文本框是data
  • 第二个按钮是UPDATE。当我点击 UPDATE 按钮时,我会在 UPDATE 按钮下方的三个文本框中显示相同的内容。
  • 第三个按钮是DELETE。当我点击 DELETE 按钮时,我只在 DELETE 按钮下方显示一个文本框。在这一文本框中将是node
  • 第四个按钮是PROCESS。当我单击 PROCESS 按钮时,我会在 PROCESS 按钮下方显示四个文本框。在这第一个文本框将是datacenter,第二个文本框将是node,第三个文本框将是data,第四个文本框将是conf

最后会有一个提交按钮,我将按下它。

这是我的jsfiddle,上面有我所说的一切。

问题陈述:-

现在我需要做的是,假设我首先单击Insert 按钮,它将在插入按钮下方提供三个文本框,然后在这三个文本框中键入一些值后,我将单击@987654335 @ 按钮,它应该将所有这三个文本框值以及我所做的操作(意味着它是 INSERT 或 UPDATE 或 DELETE 或 PROCESS)传递给我的控制器方法testOperations。因此,对于这种情况,如果我在数据中心输入 dc1,在节点输入 hello,在数据输入 world,那么它应该将所有这三个值传递给我的控制器方法,但它也应该将 conf 值传递为 null bcoz Insert 按钮没有这个文本框,所以当我们按下提交按钮时,它应该将 conf 值作为 null 传递给控制器​​方法。

类似地,如果我点击删除按钮,那么它只会在删除按钮下方显示一个文本框,一旦我点击提交按钮,它应该将删除值作为操作传递,数据中心值应该为空,节点值作为实际我们在框中输入的值,data 值也应该为 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;
    }

但不知何故,每当我在输入一些值后按下提交按钮时,它都会给我一个异常请求异常。我知道原因吗?因为假设Insert 在这三个文本框中输入值后,我按下了提交按钮,然后未设置 conf 值,我的控制器方法采用 conf 参数,这就是它抛出异常的原因.. 并解决这个问题,我可以删除 conf 参数,但是对于 Process 情况,我需要它..

那么有什么办法,我可以将那些不需要某些按钮的文本框传递给控制器​​以避免这个问题吗?

【问题讨论】:

    标签: java javascript jquery html jsp


    【解决方案1】:

    您有两种选择来解决您的问题。

    选项 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,
                                                      ) {}
    

    祝你好运!

    【讨论】:

    • 但是我们可以在 INSERT、UPDATE、DELETE 和 PROCESS 的形式中将默认值设置为 null 吗?对于那些我们不需要的文本框吧?
    • 当控制器没有收到“required=false”参数时,自动为null。
    • 而且我不能有 required=false.. 假设我点击了 Process 按钮,为此我将在该 conf 文本框中输入一些值,然后按 Submit 按钮.. 所以在这种情况下 conf 将有 null如果我将其设置为 required=false 的值。
    • 如果您不能使用 required=false,请拆分您的控制器方法,以便每个操作都会到达另一个方法,就像我的第二个选项一样。
    • 我明白了。。没有别的办法吗?意思是在表单本身中为那些我们不需要的文本框设置默认值为空?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-16
    • 1970-01-01
    • 1970-01-01
    • 2017-06-10
    相关资源
    最近更新 更多