Te traemos el hallazgo a este enigma, o por lo menos eso pensamos. Si continuas con interrogantes dínoslo y sin pensarlo
Solución:
Hay varias maneras de lograr esto.
Probablemente lo más fácil sería usar JavaScript para cambiar la acción del formulario.
Pero esto, por supuesto, no funcionará cuando el usuario final tenga JS deshabilitado (navegadores móviles, lectores de pantalla, etc.).
Otra forma es colocar el segundo botón en una forma diferente, que puede o no ser lo que necesita, según el requisito funcional concreto, que no queda claro en la pregunta.
Tenga en cuenta que al enviar un formulario solo enviaría los datos de entrada contenidos en el mismo formulario, no en el otro formulario.
Nuevamente, otra forma es simplemente crear otro servlet de punto de entrada único que delegue más a los servlets correctos (o preferiblemente, las acciones comerciales correctas) según el botón presionado (que está disponible en sí mismo como un parámetro de solicitud por su name
):
con lo siguiente en MainServlet
String action = request.getParameter("action");
if ("FirstServlet".equals(action))
// Invoke FirstServlet's job here.
else if ("SecondServlet".equals(action))
// Invoke SecondServlet's job here.
Esto no es muy amigable con i18n/mantenimiento. ¿Qué sucede si necesita mostrar los botones en un idioma diferente o cambiar los valores de los botones y olvidarse de tener en cuenta el código del servlet?
Un ligero cambio es dar a los botones su propio nombre fijo y único, de modo que se pueda verificar su presencia como parámetro de solicitud en lugar de su valor, que sería sensible a i18n/mantenimiento:
con lo siguiente en MainServlet
if (request.getParameter("first") != null)
// Invoke FirstServlet's job here.
else if (request.getParameter("second") != null)
// Invoke SecondServlet's job here.
La última forma sería simplemente usar un marco MVC como JSF para que pueda vincular directamente los métodos javabean a los botones, pero eso requeriría cambios drásticos en su código existente.
Last Name:
con solo el siguiente javabean en lugar de un servlet
@ManagedBean
@RequestScoped
public class Bean
private String lastName; // +getter+setter
public void first()
// Invoke original FirstServlet's job here.
public void second()
// Invoke original SecondServlet's job here.
Además de la respuesta anterior, la mejor opción para enviar un formulario con diferentes botones sin problemas de idioma es en realidad usando un botón etiqueta.
Si usa jQuery, puede hacerlo así:
Y js será:
$("#btnin").click(function()
$("#loginform").attr("action", "user_login");
$("#loginform").submit();
$("#btnreg").click(function()
$("#loginform").attr("action", "user_regist");
$("#loginform").submit();
Recuerda comunicar esta reseña si te valió la pena.