Comment détecter le bouton soumettre cliqué dans plusieurs boutons de soumission scénario dans une seule classe d'Action?
J'ai un formulaire dans une page jsp. Il y a deux boutons submit: "Recherche" et "Ajouter un Nouveau" bouton.
<s:form name="searchForm" action="employeeAction" method="post">
<s:textfield name="id" label="Employee ID"/>
<s:textfield name="name" label="Employee Name"/>
<s:submit value="Search"/>
<s:submit value="Add New"/>
</s:form>
Dans struts.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<constant name="struts.enable.DynamicMethodInvocation" value="false" />
<constant name="struts.devMode" value="true" />
<package name="default" namespace="/" extends="struts-default">
<default-action-ref name="index" />
<global-results>
<result name="error">/error.jsp</result>
</global-results>
<global-exception-mappings>
<exception-mapping exception="java.lang.Exception" result="error"/>
</global-exception-mappings>
</package>
<package name="example" namespace="/example" extends="default">
<action name="employeeAction" class="example.EmployeeAction">
<result name="search">/example/search.jsp</result>
<result name="add" type="redirect">/example/add.jsp</result>
</action>
</package>
</struts>
Dans Struts classe d'Action, nous savons qu'il existe une seule méthode de traitement de la requête http, c'est-à execute()
méthode.
Dans mon cas attendus, quand j'ai cliqué de Recherche bouton, il va effectuer la recherche de données et de restituer les données à /example/search.jsp
, quand j'ai cliqué Ajouter de Nouveaux bouton, il va effectuer la redirection de la page de /example/add.jsp
. Cependant, les deux boutons lorsque l'utilisateur clique dessus va aller dans la méthode execute (). J'ai donc besoin de savoir comment détecter le bouton cliqué dans la execute()
méthode.
Le scénario ressemble à ceci
public class EmployeeAction extends ActionSupport {
public String execute() throws Exception {
//PSEUDOCODE
//IF (submitButton is searchButton)
// return doSearch();
//ELSE IF (submitButton is addNewButton)
// return doAddNew();
return SUCCESS;
}
public String doSearch() throws Exception {
//perform search logic here
return "search";
}
public String doAddNew() throws Exception {
return "add";
}
}
Vous devez vous connecter pour publier un commentaire.
Vous pouvez définir deux actions dans
struts.xml
fichier et utiliseraction
attribut de<s:submit>
balise afin de soumettre à différentes actions http://struts.apache.org/docs/submit.html.En JSP:
Dans struts.xml:
Et dans votre action de créer deux
public String
méthodesadd
etsearch
.Lu sur Plusieurs Boutons de soumission http://struts.apache.org/docs/multiple-submit-buttons.html.
Mise à jour
À partir de Struts2 version 2.3.15.3 vous devez définir
struts.mapper.action.prefix.enabled
constante à true pour activer le support pouraction:
préfixe.Mettre cela dans votre
struts.xml
fichier:return SUCCESS;
danssearch()
etadd()
méthode parce que votre <suite> n'a pas de nom.Dans votre modèle de couche, de définir un
String
propriété nommée "bouton". Maintenant, pour les deux boutons submit, spécifiezname
ouproperty
attribut comme "bouton". Donc, dans votreexecute()
méthode, dans la propriété "bouton", vous obtiendrez la valeur correspondante.