java - lista - Varios botones de envío en la misma forma que llaman a diferentes servlets
varios botones en un formulario php (5)
Además de la respuesta anterior, la mejor opción para enviar un formulario con diferentes botones sin problemas de idioma es usar una etiqueta de botón .
<form>
...
<button type="submit" name="submit" value="servlet1">Go to 1st Servlet</button>
<button type="submit" name="submit" value="servlet2">Go to 2nd Servlet</button>
</form>
Primero, aquí está el código:
<form action="FirstServlet" method="Post">
Last Name: <input type="text" name="lastName" size="20">
<br><br>
<input type="submit" value="FirstServlet">
<input type="submit"value="SecondServlet">
</form>
Me gustaría saber cómo enviar información en caso de que se presione el FirstServlet button
FirstServlet
en FirstServlet
y en caso de que se SecondServlet button
SecondServlet
en SecondServlet
.
importante:
Quiero hacerlo de la misma forma, de modo que la misma información se transmite a ambos servlets. (por supuesto, en los servlets usaré la información en consecuencia)
Es posible que deba escribir un javascript para cada botón enviado. En lugar de definir la acción en la definición del formulario, establezca esos valores en javascript. Algo como abajo.
function callButton1(form, yourServ)
{
form.action = yourServ;
form.submit();
});
Hay varias formas de lograr esto.
Probablemente lo más fácil sería usar JavaScript para cambiar la acción del formulario.
<input type="submit" value="SecondServlet" onclick="form.action=''SecondServlet'';">
Pero esto, por supuesto, no funcionará cuando el usuario final tenga JS deshabilitado (navegadores móviles, lectores de pantalla, etc.).
Otra forma es poner el segundo botón en una forma diferente, que puede o no ser lo que necesita, dependiendo del requisito funcional concreto, lo cual no queda claro a partir de la pregunta en absoluto.
<form action="FirstServlet" method="Post">
Last Name: <input type="text" name="lastName" size="20">
<br><br>
<input type="submit" value="FirstServlet">
</form>
<form action="SecondServlet" method="Post">
<input type="submit"value="SecondServlet">
</form>
Tenga en cuenta que un formulario enviaría solo los datos de entrada contenidos en el mismo formulario, y no en la otra forma.
De nuevo, otra forma es simplemente crear otro servlet de punto de entrada único que delegue más a los servlets derechos (o preferiblemente, las acciones comerciales correctas) dependiendo del botón presionado (que está disponible como parámetro de solicitud por su name
):
<form action="MainServlet" method="Post">
Last Name: <input type="text" name="lastName" size="20">
<br><br>
<input type="submit" name="action" value="FirstServlet">
<input type="submit" name="action" value="SecondServlet">
</form>
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 solo muy fácil de mantener. ¿Qué sucede si necesita mostrar botones en un idioma diferente o cambiar los valores de los botones mientras olvida tomar el código del servlet en cuenta?
Un ligero cambio es dar a los botones su propio nombre fijo y único, de modo que su presencia como parámetro de solicitud se pueda verificar en lugar de su valor, que sería sensible a i18n / mantenimiento:
<form action="MainServlet" method="Post">
Last Name: <input type="text" name="lastName" size="20">
<br><br>
<input type="submit" name="first" value="FirstServlet">
<input type="submit" name="second" value="SecondServlet">
</form>
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 utilizar un framework 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.
<h:form>
Last Name: <h:inputText value="#{bean.lastName}" size="20" />
<br/><br/>
<h:commandButton value="First" action="#{bean.first}" />
<h:commandButton value="Second" action="#{bean.Second}" />
</h:form>
con solo el siguiente javabean en vez 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.
}
}
Si usas jQuery, puedes hacerlo así:
<form action="example" method="post" id="loginform">
...
<input id="btnin" type="button" value="login"/>
<input id="btnreg" type="button" value="regist"/>
</form>
Y js será:
$("#btnin").click(function(){
$("#loginform").attr("action", "user_login");
$("#loginform").submit();
}
$("#btnreg").click(function(){
$("#loginform").attr("action", "user_regist");
$("#loginform").submit();
}
Si usas la primavera esta es una mejor manera