IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Struts 1 Java Discussion :

[Tiles][Form] Changer l'attibut action du <form> selon la page


Sujet :

Struts 1 Java

  1. #1
    Membre averti
    Profil pro
    Ingénieur
    Inscrit en
    Mars 2004
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur

    Informations forums :
    Inscription : Mars 2004
    Messages : 20
    Par défaut [Tiles][Form] Changer l'attibut action du <form> selon la page
    Bonjour,

    Je cherche depuis de nombreuses heures à renseigner l'attribut action de ma balise form via un attribut défini dans mon tiles-defs.xml.

    Pour être concret, voici le code concerné dans mon tiles-def :
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    <definition name=".formulaireRecherche" path="formulaire_recherche.jsp">
        <put name="titre" type="string" value="titre.RechercheSimple" />
        <put name="action" type="string" value="AfficherFormulaireRechercheRapide.do" />
        <put name="champsDeBase" value="/layout/champs_recherche_rapide.jsp" />
        <put name="champsComplementaires"  value="" type="string" />
    </definition>
     
    <definition name="formulaireRechercheRapide" extends=".formulaireRecherche">
    </definition>
     
    <definition name="formulaireRechercheAvancee" extends=".formulaireRecherche">
        <put name="titre" type="string" value="titre.RechercheAvancee" />
        <put name="action" type="string" value="AfficherFormulaireRechercheAvancee.do" />
        <put name="champsComplementaires"  value="/layout/champs_recherche_avancee.jsp" />
    </definition>

    Mon jsp principal :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
    <%@page contentType="text/html" pageEncoding="UTF-8"%>
    <%@ taglib uri="http://jakarta.apache.org/struts/tags-bean" prefix="bean" %>
    <%@ taglib uri="http://jakarta.apache.org/struts/tags-html" prefix="html" %>
    <%@ taglib uri="http://jakarta.apache.org/struts/tags-logic" prefix="logic" %>
     
    <div class="titreLargeRubrique">
        <tiles:get name="titre" />
    </div>
    <div id="rechercheRapideAccueil">
        <p><bean:message key="recherche.message.choixCriteres"/></p>
     
        <tiles:useAttribute id="action" name="action" classname="java.lang.String" />
        <form action="<%= pageContext.findAttribute("action")  %>">
            <tiles:get name="champsDeBase" />
            <tiles:get name="champsComplementaires" />
            <html:submit property="bouton" value="Recherche" />
            <html:errors />
        </form>
     </div>
    Et je voudrais mettre la valeur de l'attribut action dans l'action de ma balise form. Comme vous pouvez le voir j'ai tenté
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <tiles:useAttribute id="action" name="action" classname="java.lang.String" />
        <form action="<%= pageContext.findAttribute("action")  %>">
    mais ça me donne action=null dans le code source.

    Je suis à court d'idées, alors si vous savez comment faire, votre aide est la bienvenue.

  2. #2
    Membre averti
    Développeur informatique
    Inscrit en
    Janvier 2008
    Messages
    38
    Détails du profil
    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2008
    Messages : 38
    Par défaut
    essais d'ajouter ça dans ta page jsp,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <%@taglib uri="/WEB-INF/struts-tiles.tld" prefix="tiles" %>
    normalement, tu trouve struts-tiles.tld dans le dossier WEB-INF de ton application, sinon tu spécifie le bon endroit toujours dans ton application.
    Je crois pour manipuler le taglib tiles il faut se référer comme les autres taglib à leurs fichiers.tld, j'espère que ça t'aide.
    Bonne chance

  3. #3
    Membre averti
    Profil pro
    Ingénieur
    Inscrit en
    Mars 2004
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur

    Informations forums :
    Inscription : Mars 2004
    Messages : 20
    Par défaut
    Evidemment !! MERCI, j'avais complètement oublié de déclarer la tag library, ça ne risquait pas de fonctionner. Maintenant je récupère bien ma valeur.

    Malheureusement, je suis désormais confronté à un autre problème. Le morceau de tile champsdeBase semble planter et j'obtiens l'erreur suivante à l'éxécution :

    21 févr. 2009 21:15:41 org.apache.struts.taglib.tiles.InsertTag$InsertHandler doEndTag
    GRAVE: ServletException in '/layout/champs_recherche_rapide.jsp': javax.servlet.jsp.JspException: Cannot find bean under name org.apache.struts.taglib.html.BEAN
    org.apache.jasper.JasperException: An exception occurred processing JSP page /layout/champs_recherche_rapide.jsp at line 6
    Ca vous dit quelque chose ?

    Pour info, voici la jsp associée :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    <%@page contentType="text/html" pageEncoding="UTF-8"%>
    <%@ taglib uri="http://jakarta.apache.org/struts/tags-bean" prefix="bean" %>
    <%@ taglib uri="http://jakarta.apache.org/struts/tags-html" prefix="html" %>
    <%@ taglib uri="http://jakarta.apache.org/struts/tags-logic" prefix="logic" %>
     
    <html:select property="marque" onchange="document.forms[1].submit()">
       <html:options name="FormulaireRechercheParMarque" property="listeMarques" />
    </html:select>
    <html:select property="modele">
       <html:options name="FormulaireRechercheParMarque" property="listeModeles" />
    </html:select>
    <html:select property="energie">
       <html:options name="FormulaireRechercheParMarque" property="listeEnergies" />
    </html:select>
    Le fait que ce fichier soit dans un "tile imbriqué" peut être gênant pour l'accès au bean ?

  4. #4
    Expert confirmé

    Femme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 793
    Par défaut
    Pour avoir accès au form-bean, il faut remplacer le tag form par un tag html:form.

  5. #5
    Membre averti
    Profil pro
    Ingénieur
    Inscrit en
    Mars 2004
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur

    Informations forums :
    Inscription : Mars 2004
    Messages : 20
    Par défaut
    Merci pour ta réponse. j'ai essayé ça hier soir, le problème, c'est qu'à partir du moment ou je met html:form à la place de form, je ne peux plus mettre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <%= pageContext.findAttribute("action")  %>
    dans l'action, ça ne semble plus interpreté.

    Ce n'est pas le seul cas qui pose problème, je voulais également me reposer sur les tiles pour stocker la clé titre.rechercheSimple ou titre.rechercheAvancee, mais pas moyen de faire un bean:message avec la valeur définie dans le tiles-def.

    Je crois que le mieux au final, c'est que je me repose moins sur les tiles et que je fasse un peu plus de pages, quitte à répéter des morceaux de jsp identiques.

  6. #6
    Membre averti
    Profil pro
    Ingénieur
    Inscrit en
    Mars 2004
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur

    Informations forums :
    Inscription : Mars 2004
    Messages : 20
    Par défaut
    Ca y est j'ai fini par trouver la réponse à mon problème !

    il suffit d'utiliser la syntaxe ${variable} dans les champs de mon html:form ou bean:message. J'ai donc ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    <div class="premierTitreLargeRubrique">
        <tiles:useAttribute id="titre" name="titre" />
        <bean:message key="${titre}" />
    </div>
    <div id="rechercheRapideAccueil">
         <p><bean:message key="recherche.message.choixCriteres"/></p>
        <tiles:useAttribute id="action" name="action" />
        <html:form action="${action}">
            <tiles:get name="champsDeBase" />
        </html:form>
     </div>
    Et ça fonctionne

    Quelqu'un pourrait-il m'expliquer ce que signifie précisément cette syntaxe ${variable} ? Parce que je l'ai trouvé quelque part sur un forum, mais je l'utilise sans trop être sur de savoir ce que j'utilise...

  7. #7
    Expert confirmé

    Femme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 793
    Par défaut
    C'est une EL (Expression Language).
    Pour plus d'infos, voir le tutoriel d'adiGuba :
    Les Expressions Languages (EL) permettent de manipuler les données au sein d'une page JSP (ou d'un fichier *.tag) plus simplement qu'avec les scriptlets Java.


    Une EL permet d'accéder simplement aux beans des différents scopes de l'application web (page, request, session et application). Utilisé conjointement avec des librairies de tags, elles permettent de se passer totalement des scriptlets.

  8. #8
    Membre averti
    Profil pro
    Ingénieur
    Inscrit en
    Mars 2004
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur

    Informations forums :
    Inscription : Mars 2004
    Messages : 20
    Par défaut
    Exactement ce que je recherchais. J'ai de la lecture devant moi !

    Merci pour votre aide.

  9. #9
    Expert confirmé

    Femme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 793
    Par défaut
    De rien.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Via select : changer action d'un form puis submit + smartphone
    Par Invité dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 04/09/2013, 13h53
  2. Changer l'action d'un form en C#
    Par Jimmy_S dans le forum ASP.NET
    Réponses: 4
    Dernier message: 07/02/2008, 16h26
  3. changer l'action d'un form selon valeur d'un bouton radio
    Par Nemesys dans le forum Servlets/JSP
    Réponses: 1
    Dernier message: 09/06/2007, 17h48
  4. Réponses: 3
    Dernier message: 02/12/2004, 08h50
  5. [Forms] changer les couleurs
    Par Nounoursonne dans le forum Forms
    Réponses: 11
    Dernier message: 02/04/2004, 09h40

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo