Estoy tratando de que 2 botones de envío se publiquen en un formulario, con cada acción de botón asignada a diferentes controladores. Aquí están mis asignacionesSpring MVC - Botón de envío múltiple a un formulario
@RequestMapping(value="/save", method=RequestMethod.POST, params="save")
@RequestMapping(value="/save", method=RequestMethod.POST, params="renew")
Y mis botones de envío parecerse a ellos -
<input type="submit" name="save" class="button" value="Save" />
<input type="submit" name="renew" class="button" value="Renew" />
Como se puede ver en mi asignación, yo estoy confiando en el uso de los parametros para diferenciar lo que el botón se ha hecho clic en. El problema es que funciona el 90% del tiempo, pero a veces tengo la excepción abajo -
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)
Curiosamente, cuando esto sucede y volver a presentar la página, todo funciona bien después. ¿Hay una mejor manera de lograr lo que estoy tratando de hacer?
Gracias!
No estoy seguro si es su problema, pero tenga en cuenta que algunos navegadores suele enviar el par clave/valor de los botones si el usuario envía el formulario a través de la tecla Intro u otros métodos además de hacer clic en el botón. Por lo tanto, asegúrese de asumir una acción predeterminada, que para la compatibilidad del navegador debe ser la acción del * primer botón * en el origen html de ese formulario. – goat