我想有2提交按鈕發佈到窗體,每個按鈕操作映射到不同的控制器。這裏是我的映射春季MVC - 多個提交按鈕到一個表格
@RequestMapping(value="/save", method=RequestMethod.POST, params="save")
@RequestMapping(value="/save", method=RequestMethod.POST, params="renew")
我的提交按鈕看起來像這些 -
<input type="submit" name="save" class="button" value="Save" />
<input type="submit" name="renew" class="button" value="Renew" />
正如你可以看到從我的映射,我依賴於使用則params的區分被點擊了什麼按鈕。問題是,它的作品90%的時間,但有時我得到下面的異常 -
java.lang.IllegalStateException: Ambiguous handler methods mapped for HTTP path 'http://localhost:8090/myapp/save': {public java.lang.String com.myapp.SaveController.save(MyEntity,javax.servlet.http.HttpSession), public java.lang.String com.myapp.SaveController.saveAndRenew(MyEntity,javax.servlet.http.HttpSession)}
org.springframework.web.servlet.handler.AbstractHandlerMethodMapping.lookupHandlerMethod(AbstractHandlerMethodMapping.java:248)
org.springframework.web.servlet.handler.AbstractHandlerMethodMapping.getHandlerInternal(AbstractHandlerMethodMapping.java:194)
奇怪的是,當這種情況發生,我重新提交頁面,一切工作正常之後。有沒有更好的方法來實現我想要做的事情?
謝謝!如果指定了表格這些按鈕
@RequestMapping(value="/save", method=RequestMethod.POST)
public String handlePost(@RequestParam String action){
if(action.equals("save")){
//handle save
}
else if(action.equals("renew")){
//handle renew
}
}
如果您的問題不知道,但請記住,如果用戶提交表單一些瀏覽器不會發送鍵/值對任何按鈕除了點擊按鈕之外,還可以通過輸入鍵或其他方法。因此,請確保採取默認操作,對於瀏覽器兼容性,該默認操作需要是該表單的html源代碼中第一個按鈕*的操作。 – goat