2010-02-26 5 views
-1

Pour avoir plusieurs actions sur un formulaire, j'utilise dispatchAction. Je commence par une action solitaire qui fonctionne quand j'utilise l'action standard avec la méthode execute. Avant d'ajouter plusieurs actions, je commence à convertir celui-ci.struts 1.1: erreur d'action de répartition: erreur 400 aucun paramètre dans la requête

A première charge du jsp, avant tout soumettre, je reçois l'erreur:

Erreur 400: Demande [/ rechercheUtilisateur] ne paramètre contient pas de gestionnaire nommé caché

Voici ma configuration:

struts-config:

<action path="/rechercheUtilisateur" type="lan.poujoulat.osac.actions.RechercheUtilisateurAction" name="formRechercheUtilisateur" validate="true" input="/Administration/acces.jsp" scope="request" parameter="hidden"> 
    <forward name="réussiteRecherche" path="/Administration/acces.jsp"> 
    </forward> 

jsp administration/acces.jsp:

<SCRIPT> 
    function setHidden(value){document.formRechercheUtilisateur.hidden.value=value;} 
</SCRIPT> 

<html:form action="/rechercheUtilisateur" 
    name="formRechercheUtilisateur" 
    type="lan.poujoulat.osac.forms.FormRechercheUtilisateur"> 
... 
<td align="center" width="80"><a href="#" 
    title='"Rechercher" />'> <input type=image 
    value=submit src="./image/btnRech.gif" width="22" height="20" 
    border="0" onclick="setHidden('recherche');"> </a></td> 
</a> 
... 
      <html:hidden property="hidden" value="recherche"/> 
</html:form> 

RechercheUtilisateurAction.java:

public class RechercheUtilisateurAction extends DispatchAction 
{ 

    public ActionForward recherche(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) 
      throws Exception { 

j'ajouter la propriété cachée à ma forme:

public class FormRechercheUtilisateur extends ValidatorForm 
{ 
... 
    private String hidden = " "; 
... 

Répondre

0

Je pense que votre code est en conflit avec la propriété hidden du formulaire. Le JavaScript form object a un objet hidden qui représente un champ de formulaire caché qui est utilisé pour les communications du serveur client.

Je ne suis pas sûr que le code suivant:

function setHidden(value) { 
    document.formRechercheUtilisateur.hidden.value=value; 
} 

définira la valeur du champ caché que vous avez configuré avec ceci:

<html:hidden property="hidden" value="recherche"/> 

Je ne l'ai jamais utilisé cet objet avant donc je ne peux pas vraiment dire.

Le message est assez clair, vous n'avez pas le paramètre dont DispatchAction a besoin sur la demande. Le problème est simple à déboguer, voir quels paramètres arrivent sur la requête au serveur. Vous pouvez définir la méthode de formulaire à GET pour un aperçu rapide, juste pour voir si le paramètre est dans l'URL.

Vérifiez d'abord où le problème est (côté serveur/côté client), alors la solution pourrait être aussi simple que de changer le nom du champ (un nom de "caché" ne dit rien de ce qu'il représente) ou vous pourriez faire quelque chose comme:

function setHidden(value) { 
    document.formRechercheUtilisateur.hidden.value=value; 
    document.formRechercheUtilisateur.hidden.name='hidden'; 
} 

mais je ne suis pas sûr que cela fonctionnera bien.

+0

En effet, le nom « caché » était juste à cause de la tu Je suis pour faire cela. Le vrai nom est "méthode", une fois que je dois le mettre dans le CVS, mais nvm. L'un des meilleurs moyens d'accéder à cette variable est: this.form.method.value. Et en effet le message était clair mon paramètre n'était pas initialisé. – jayjaypg22

0

Je programme mon index pour passer dans mon action afin d'initialiser certaines données avant mon jsp. L'index n'a pas fourni de paramètre caché.

Solution: mon jsp n'a pas vraiment besoin d'initialisation (une liste nulle ne pose pas de problème dans ma balise d'affichage) donc l'action d'index forward est Administration/acces.jsp. Pas besoin d'exécuter l'action implique pas besoin d'initialiser mon paramètre.

Et l'initialisation dans la jsp est faite par

this.form.hidden.= valeur

0

Vous ne trouvez pas le vrai problème, car le vrai problème était ce code:

<forward name="acces" path="/rechercheUtilisateur.do"> 

Ce que je n'ai pas fourni. En effet cela va à

<action path="/rechercheUtilisateur" type="lan.poujoulat.osac.actions.RechercheUtilisateurAction" name="formRechercheUtilisateur" validate="true" input="/Administration/acces.jsp" scope="request" parameter="hidden"> 
    <forward name="réussiteRecherche" path="/Administration/acces.jsp"> 
    </forward> 

avec Caché non initialisé.

Solution:

<forward name="acces" path="/acces.jsp"> 

En effet je n'ai pas besoin initilisation avant d'accéder à mon jsp (la liste dans mon étiquette d'affichage peut être null)