2012-01-21 28 views
0

我有這樣的控制器:Spring MVC中通過JavaScript提交(無按鈕)正確處理

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

任何想法如何做到這一點?謝謝 !

回答

0

看來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()」

+0

感謝您的快速回答:)不幸的是,如果將隱藏的字段放在表單中,它不起作用:選擇標籤,選擇列表不顯示:( –

+0

對不起,我犯了一些愚蠢的錯誤:(我剛剛糾正了答案。讓我知道如果仍然不會工作。 – user1078445

+0

現在它工作正常,除了第二次提交按鈕:。我想我必須用javascript函數替換它,我會嘗試一下你給我的提示,看看我能不能使它工作 –