Spring MVC通过javascript(不带按钮)提交给正确的处理程序

Spring MVC submit via javascript (without button) to the correct handler

本文关键字:提交 程序 处理 按钮 通过 MVC javascript Spring      更新时间:2023-09-26

我有这个控制器:

@Controller
@RequestMapping("/path/*")
public class MyController {
    @RequestMapping(value = "/", method = RequestMethod.GET)
    public String welcomeHandler(final Model model) {
        // SOME CODE...
    }
    @RequestMapping(params = "reloadPage", value = "/", method = RequestMethod.POST)
    public String reloadPageHandler(final Model model) {
        // SOME CODE...
    }
    @RequestMapping(params = "search", value = "/", method = RequestMethod.POST)
    public String processSubmit(final BindingResult result...)
        // SOME CODE...
    }
}

这个jsp:

<form:form id="SearchFormController" method="post" modelAttribute="SearchFormBean">
    <form:select path="searchCriteria.departmentId">
        <form:options items="${addressDepartmentList}" itemValue="id" itemLabel="name" />
    </form:select>
    <p>
        <button type="submit" name="reloadPage">Reload the page</button>
    </p>
    <form:select path="searchCriteria.cityId">
        <form:options items="${addressCityList}" itemValue="id" itemLabel="name" />
    </form:select>
    <p>
        <button type="submit" name="search">Submit</button>
    </p>
</form:form>

这段代码运行得非常好,当我单击"重新加载页面"按钮时,就会调用reloadPageHandler。

现在,我想要实现的是删除这个按钮,并在我的jsp上放置一个onchange事件,如下所示:

<form:select path="searchCriteria.departmentId" onchange="submit()">
    <form:options items="${addressDepartmentList}" itemValue="id" itemLabel="name" />
</form:select>

这里的问题是,当提交表单时,调用的是"processSubmit"处理程序。但我必须调用"reloadPageHandler"。

你知道怎么做吗?谢谢

似乎缺少reloadPage参数。(前一个按钮的名称。)

如果您将具有此名称的隐藏字段放入表单中,它应该可以工作:

<form:form id="SearchFormController" method="post" modelAttribute="SearchFormBean">
    <input type="hidden" name="reloadPage" value=""/>
    <form:select path="searchCriteria.departmentId" onchange="submit()">
        <form:options items="${addressDepartmentList}" itemValue="id" itemLabel="name" />
    </form:select>
</form:form>

但这段代码的问题仍然是,总是会调用processSubmit处理程序。因此,一个解决方案可以是更改控制器,即只有当reload=true时才调用reloadPageHandler。然后将onchange更改为"this.form.reloadPage.value='true';submit()"