Saltar al contenido

Múltiples botones de envío en el mismo formulario llamando a diferentes Servlets

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.

Last Name:

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):

Last 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:

Last Name:

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.

¡Haz clic para puntuar esta entrada!
(Votos: 2 Promedio: 4)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *