Spring MVC отправлять через JavaScript (без кнопки) на правильный обработчик - PullRequest
0 голосов
/ 21 января 2012

У меня есть этот контроллер:

@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.

Теперь я хочу удалить эту кнопку и поместить событие onchange в мой jsp, например:

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

Проблема в том, что при отправке формы вызывается обработчик processSubmit. Но я должен вызвать «reloadPageHandler».

Есть идеи, как это сделать? Спасибо!

1 Ответ

0 голосов
/ 21 января 2012

Кажется, что параметр 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>

Но проблема в этом коде заключается в том, что всегда вызывается обработчик процесса SubSmit. Таким образом, решением может быть изменение контроллера, который вызывается reloadPageHandler, только если reload = true. Затем измените onchange на "this.form.reloadPage.value = 'true'; submit ()"

...