[SPRING] Spring MVC - 폼에 여러 제출 버튼
SPRINGSpring MVC - 폼에 여러 제출 버튼
각 단추 작업이 다른 컨트롤러에 매핑 된 폼에 2 개의 단추 게시 단추를 보내려고합니다. 내 매핑은 다음과 같습니다.
@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" />
내 매핑에서 알 수 있듯이 매개 변수를 사용하여 클릭 한 버튼을 구분할 수 있습니다. 문제는 시간의 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)
이상하게도이 일이 발생하고 페이지를 다시 제출하면 모든 것이 잘됩니다. 내가하려는 일을 성취 할 수있는 더 좋은 방법이 있습니까?
감사!
해결법
-
==============================
1.양식에 다음 버튼이 지정되어있는 경우 :
양식에 다음 버튼이 지정되어있는 경우 :
input type="submit" class="button" name="save" value="Save" input type="submit" class="button" name="delete" value="Delete" input type="submit" class="button" name="cancel" value="Cancel"
하나의 컨트롤러로 버튼을 누르면 다른 URL 요청을 할 수 있습니다.
취소 버튼,
@RequestMapping(params = "cancel", method = RequestMethod.POST) public String cancelUpdateUser(HttpServletRequest request) { return "redirect:/users.html"; }
요청 매핑이 수행하는 작업은 params name = cancel이 포함 된 게시물 요청을 검색하는 것입니다.
저장 버튼,
@RequestMapping(params = "save", method = RequestMethod.POST) public String saveUser(HttpServletRequest request, @ModelAttribute User user, BindingResult result, SessionStatus status) { // validate your result // if no errors, save it and redirect to successView. }
-
==============================
2.왜 안돼 :
왜 안돼 :
<input type="submit" name="action" value="save" />
그리고:
@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 } }
-
==============================
3.params 속성에서만 다른 @RequestMapping과 함께 더 많은 컨트롤러 메소드가있는 경우 명시 적으로 다음을 작성해야합니다.
params 속성에서만 다른 @RequestMapping과 함께 더 많은 컨트롤러 메소드가있는 경우 명시 적으로 다음을 작성해야합니다.
귀하의 경우 :
@RequestMapping(value="/save", method=RequestMethod.POST, params={"save", "!renew"}) @RequestMapping(value="/save", method=RequestMethod.POST, params={"renew", "!save"})
HTTP 경로에 매핑 된 오류 모호한 핸들러 메서드를 수정해야합니다 ...
Spring Web API 4.0.x - RequestMapping # params를 참조하십시오.
-
==============================
4.이 방법과 비슷한 방법으로 하나의 컨트롤러를 만드십시오.
이 방법과 비슷한 방법으로 하나의 컨트롤러를 만드십시오.
@RequestMapping(value="/save", method=RequestMethod.POST) public String handlePost(@RequestParam(required=false , value = "save") String saveFlag , @RequestParam(required=false , value = "renew") String renewFlag){ if(saveFlag != null{ //handle save } else if(renewFlag !=null{ //handle renew } }
-
==============================
5.하나 더 솔루션 :
하나 더 솔루션 :
@RequestMapping(value="/save", method={RequestMethod.POST}, params={"save=Save"}) @RequestMapping(value="/save", method={RequestMethod.POST}, params={"renew=Renew"})
from https://stackoverflow.com/questions/8954426/spring-mvc-multiple-submit-button-to-a-form by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] 스프링 보안 로그 아웃이 작동하지 않음 - 보안 컨텍스트를 지우지 않고 인증 된 사용자가 여전히 존재 함 (0) | 2019.03.02 |
---|---|
[SPRING] Spring에서의 테스트 목적을 위해 메모리 데이터베이스에 특정 구성 (0) | 2019.03.02 |
[SPRING] Java Dependency Injection : XML 또는 주석 (0) | 2019.03.02 |
[SPRING] 매개 변수가있는 JUnit SpringJUnit4ClassRunner를 실행하는 방법 (0) | 2019.03.01 |
[SPRING] 평신도의 봄 전파 예제 (0) | 2019.03.01 |