Spring注释@RequestParam可以与带有类型按钮标签的HTML输入一起使用吗?

时间:2018-08-08 10:22:08

标签: javascript spring

我尝试为一种形式使用“类型”为“ button”的多个输入字段。波纹管是一个代码:

<input type="button" name="submitButton" value="Validate" style="margin-right:5px" onclick="
                    doConfirm('<%=prop.getProperty("message.dialog.DatabasePage.OnlyValidation")%>',
                    function yes() {
                    $('#myForm').submit();
                    },
                    function no() {
                    },
                    validateForm()
                    );
                    form.action='/validate-configuration';
                    "/>

            <input type="button" name="submitButton" value="Obfuscate" style="margin-left:5px" onclick="
                    doConfirm('<%=prop.getProperty("message.dialog.DatabasePage")%>',
                    function yes() {
                    $('#myForm').submit();
                    },
                    function no() {
                    },
                    validateForm()
                    );
                    form.action='/validate-configuration';

我想知道在弹簧控制器中单击了什么按钮:

@PostMapping("/validate-configuration")
public String startValidate(@RequestParam("configuration") UUID configurationId,
                            @RequestParam String dataSourceId,
                            @RequestParam String schema,
                            @RequestParam String password,
                            @RequestParam(name = "submitButton") String submitButton,
                            @RequestParam(name = "hashing_salt", defaultValue = "") String hashingSalt,
                            HttpSession session,
                            Map model) {...}

但是出现错误:“ org.springframework.web.bind.MissingServletRequestParameterException:所需的字符串参数'submitButton'不存在”。我想知道是否可以在HTML输入标签(类型“按钮”)中使用spring注释@RequestParam? 请不要使用“提交”类型,而要使用“按钮”类型。如果我将使用“提交”类型,则我的确认对话框将无法使用。 我会感谢您的想法。

1 个答案:

答案 0 :(得分:0)

因为@RequestParam不适用于HTML输入标签(类型为“按钮”),所以我决定使用一些技巧。我们可以将type =“ text”和style =“ visibility:hidden;”添加到html标记输入标签中。并通过该字段传递所需的值。 HTML:

<tr>
        <td>



            <input type="button" name="submitButton" value="Validate" style="margin-right:5px" onclick="
                    doConfirm('<%=prop.getProperty("message.dialog.DatabasePage.OnlyValidation")%>',
                    function yes() {
                    $('#myForm').submit();
                    },
                    function no() {
                    },
                    validateForm()
                    );
                    $('#validationRequired').val(true);
                    form.action='/validate-configuration';
                    "/>

            <input type="button" name="submitButton" value="Obfuscate" style="margin-left:5px" onclick="
                    doConfirm('<%=prop.getProperty("message.dialog.DatabasePage")%>',
                    function yes() {
                    $('#myForm').submit();
                    },
                    function no() {
                    },
                    validateForm()
                    );
                    $('#validationRequired').val(false);
                    form.action='/validate-configuration';
            "/>
        </td>
        <td>
            <input id="validationRequired" type="text" name="validationRequired" style="visibility: hidden;"></input>
        </td>
        <td>&nbsp;</td>
    </tr>

Spring控制器:

 @PostMapping("/validate-configuration")
public String startValidate(@RequestParam("configuration") UUID configurationId,
                            @RequestParam String dataSourceId,
                            @RequestParam String schema,
                            @RequestParam String password,
                            @RequestParam String validationRequired,
                            @RequestParam(name = "hashing_salt", defaultValue = "") String hashingSalt,
                            HttpSession session,
                            Map model) {...}

该解决方案有效,但可能不会更好(安全性降低)。