javascript - page - jquery selectionner element




Comment appeler une méthode dans la méthode Struts2 Action Class avec javascript (2)

Il existe différentes façons d'obtenir ce que vous voulez, mais le plus simple est probablement de mapper différentes actions à différentes méthodes du même fichier de classe d'action, par exemple. avec des annotations:

public class NameAction {

    @Action("myAction")
    public String execute(){ ... }

    @Action("myActionFindName")
    public String findName(){ ... }

}

ou avec XML:

<action name="myAction" class="project.location.NameAction">
    <result name="success" type="tiles">myAction</result>   
</action>

<action name="myActionFindName" class="project.location.NameAction" method="findName">
    <result name="success" type="tiles">myAction</result>   
</action>

Puis en javascript:

var url = "project/location/myActionFindName.action?name="+ lname ;

Nous utilisons actuellement le javascript suivant pour soumettre le formulaire lorsque l'une des valeurs du champ change.

var url = "project/location/myAction.action?name="+ lname ; 
document.forms[0].action = url;
document.forms[0].submit();

qui appelle l'action Struts2 suivante

<action name="myAction" class="project.location.NameAction">
    <result name="success" type="tiles">myAction</result>   
</action>

qui va ensuite à la méthode execute() de la classe Action NameAction où je dois vérifier si le formulaire a été soumis depuis le javascript.

Je préférerais appeler la méthode findName() dans NameAction directement depuis le javascript. En d'autres termes, je veux que le javascript agisse comme le code jsp suivant.

<s:submit method="findName" key="button.clear" cssClass="submit" >

Toute aide serait appréciée!


Pour être complet, voici comment j'ai mis en œuvre les conseils d'Andrea et Roman.

Lorsque l'utilisateur saisit des données dans les champs firstName et lastName , nous lui montrons une liste de noms à choisir pour remplir le reste du formulaire. Le jsp est

                <div class="row">
                <div class=" col-sm-2 col-xs-12 no-padding-right text-right"><span class="required">*</span><label class="pull-right" for="lastNameId"><s:text name="lastName"></s:text>:</label></div>             
                <div class=" col-sm-2 col-xs-12 no-padding-right ">
                    <s:textfield name="lastName"  id="lastNameId" maxlength="50" onchange ="dirtyFlag();" onblur="selectNameInfo(\'newRequest\');" class="form-control"/>
                </div>
                <div class=" col-sm-2 col-xs-12 no-padding-right text-right " ><span class="required">*</span><label class="pull-right" for="firstNameId"><s:text name="firstName"></s:text>:</label></div>             
                <div class=" col-sm-2 col-xs-12 no-padding-right ">
                    <s:textfield name="firstName" id="firstNameId" maxlength="50" onchange ="dirtyFlag();" onblur="selectNameInfo(\'newRequest\');" class="form-control"/>
                </div>   
            </div>      

Le javascript est

        function selectNameInfo(formId) {
        var lastName = document.forms[0].elements["lastNameId"].value;
        var firstName = document.forms[0].elements["firstNameId"].value;

        if(lastName != "" && firstName != ""){
        clearDirtyFlag(); 
        var oldAction = document.getElementById(formId).action;
        var actionName = document.getElementById(formId).name;
        var url = oldAction.replace(actionName,actionName+"_NameSearch");
            document.forms[0].action = url;
            document.forms[0].submit();
        };
    }

Le javascript forme une URL en ajoutant "_NameSearch" à l' action du formulaire appelant la fonction selectNameInfo() . Dans ce cas, la nouvelle action est newRequest_NameSearch qui va au xml suivant qui appelle la méthode generateNameList() de la classe d'action sans utiliser DMI qui était ma question initiale.

    <action name="newRequest_NameSearch" class="gov.mo.dnr.egims.controller.evaluation.NewRequestAction" method = "generateNameList">           
        <result name="success" type="tiles">newRequest</result>
        <result name="nameSearch" type="tiles">selectNameInfo</result>
        <result name="error" type="tiles">error</result>            
    </action>




struts-action