2011-09-12 12 views
5

tengo este código en mi JSP:múltiple botón Enviar en Struts 1.3

<%@taglib uri="http://struts.apache.org/tags-html" prefix="html"%> 
.. 
.. 
<html:form action="update" > 
    .. 
    .. 
    <html:submit value="delete" /> 
    <html:submit value="edit" /> 
    <html:sumit value="update" /> 
</html:form> 

Y esto en el archivo struts-config.xml:

<action path="/delete" name="currentTimeForm" input="/viewall.jsp" type="com.action.DeleteProduct"> 
    <forward name="success" path="/viewall.jsp" /> 
    <forward name="failure" path="/viewall.jsp" /> 
</action> 

Al igual que la acción delete, tengo edit y update. Funciona bien, si le doy el nombre específicamente como <html:form action="delete"> pero, ¿cómo hacer que funcione dinámicamente para update y edit?

Respuesta

18

Tiene un formulario y varios botones de envío. El problema es que un formulario solo puede enviarse a una acción, independientemente de la cantidad de botones de envío que tenga dentro del formulario.

Tres soluciones vienen a la mente en este momento:

1. tener sólo una acción en la que envíe todo. Una vez dentro de la clase de Acción, compruebe qué botón se utilizó para enviar el formulario y realizar el tratamiento adecuado en función de eso.

<html:form action="modify"> 
    .. 
    .. 
    <html:submit value="delete"/> 
    <html:submit value="edit" /> 
    <html:sumit value="update" > 
</html:form> 

En el método ModifyAction.execute(...) tener algo como:

if (request.getParameter("delete") != null || request.getParameter("delete.x") != null) { 
    //... delete stuff 
} else if (request.getParameter("edit") != null || request.getParameter("edit.x") != null) { 
    //...edit stuff 
} else if (request.getParameter("update") != null || request.getParameter("update.x") != null) { 
    //... update stuff 
} 

2. tienen el atributo de acción del formulario HTML cambiarse usando JavaScript antes de enviar el formulario. En primer lugar, cambiar los botones de someterse a las sencillas con manipuladores clic adjuntos:

Con el manejador:

function submitTheForm(theNewAction) { 
    var theForm = ... // get your form here, normally: document.forms[0] 
    theForm.action = theNewAction; 
    theForm.submit(); 
} 

3. Utilice A (clase de una acción similar al punto 1) DispatchAction pero sin la necesidad de probar para qué botón se hizo clic ya que se trata en el DispatchAction.

Usted acaba de proporcionar tres métodos de ejecución correctamente llamados delete, edit y update. Here is an example that explains how you might do it.

En conclusión: Para el número 1, no me gustan esas pruebas feas ... para el número 2, realmente no me gusta el hecho de que tienes que jugar con el formulario de acción usando JavaScript, así que personalmente me gustaría llamar al para obtener el número 3.

+0

Muchas gracias .... Déjame intentar ... – Nageswaran

+2

realmente buena orientación dada por usted - +1 – Naved

+0

Wow. Exactamente lo que necesito ¡Gracias un montón! – ykombinator

0

Hay otra forma más simple de hacer esto de la siguiente manera:

En el ActionForm currentTimeForm, añadir una propiedad de cadena (ejemplo: buttonClicked).

En el jsp, en cada uno de los html: enviar etiquetas, agregar esta propiedad.

Ahora, en el método de ejecución de acciones simplemente verifique el valor de esta propiedad, es decir.

if(currentTimeForm.getButtonClicked().equals("delete"){ 
} 
else if((currentTimeForm.getButtonClicked().equals("edit")) 

y así sucesivamente ...

+0

considero esto como una forma no eficiente de hacer esto. Con 10 formularios, por ejemplo, que tienen botones de envío doble o triple, no puedes seguir agregando sesiones o solicitar variables o agregar más variables a tu bean. –