【问题标题】:Spring MVC submit via javascript (without button) to the correct handlerSpring MVC 通过 javascript(无按钮)提交到正确的处理程序
【发布时间】:2012-01-21 19:40:55
【问题描述】:

我有这个控制器:

@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”。

关于如何做到这一点的任何想法?谢谢!

【问题讨论】:

    标签: javascript spring model-view-controller form-submit


    【解决方案1】:

    似乎缺少 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-Handler 总是会被调用。因此,一个解决方案可能是更改控制器,仅当 reload=true 时才调用 reloadPageHandler。然后把onchange改成“this.form.reloadPage.value='true';submit()”

    【讨论】:

    • 感谢您的快速回答 :) 不幸的是,它不起作用,如果我将隐藏字段放在 form:select 标记内,则不会呈现选择列表:(
    • 对不起,我犯了一些愚蠢的错误:(我刚刚更正了答案。如果仍然不起作用,请告诉我。
    • 现在它工作正常,除了第二个提交按钮:。我想我也必须用 javascript 函数替换它?我会尝试你给我的提示,看看我是否能成功。
    • 您是否更改了仅在“reloadPage=true”时才调用reloadPageHandler 的控制器? @RequestMapping(params = "reloadPage=true", ...
    • 我刚刚改了。现在,当我尝试通过 javascript 提交时,出现以下错误:HTTP 405 - Request method 'POST' not supported
    猜你喜欢
    • 1970-01-01
    • 2015-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-17
    • 2013-02-15
    • 2012-02-11
    • 1970-01-01
    相关资源
    最近更新 更多