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

Tapestry Java Discussion :

Tapestry 5 et checkbox


Sujet :

Tapestry Java

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 104
    Points : 52
    Points
    52
    Par défaut Tapestry 5 et checkbox
    Hello,

    Je galère depuis un moment avec les checkbox et tapestry 5. Je souhaite afficher une page qui contient un ensemble de checkbox, puis soumettre cette page qui traitera les items correspondant aux checkbox cochées puis rediriger vers cette même page avec les mêmes coches que celles faites avant le traitement précédant. C'est super simple avec des JSP mais avec Tapestry 5 ça merdouille.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    <t:Loop t:source="processTypes" t:value="processType" formState="none">
        <t:Loop t:source="processType.documentTypes" t:value="documentType" formState="none">
            <t:Loop t:source="documentType.documentFields" t:value="documentField" formState="values">
                                                        <t:if test="documentField.checked">
                                                            <input type="checkbox" name="selectedDocumentFields" value="${documentField.documentFieldDN}" checked="checked"/>
                                                        </t:if>
                                                      <!-- <input t : type="checkbox" t : id="checked" value="documentField.documentFieldDN" />-->
            ...
    Howard lewis ship conseille de passer via la requête http sans utiliser de composants tapestry pour ce cas. C'est ce que j'ai fais. Par contre pour l'affichage lors du retour vers cette page apres la soumission le documentField.checked est toujours à false.

    Donc j'ai du me vautrer et surtout j'ai l'impression de faire une usine à gaz.

    sur le onActivate() j'ai :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
            _exportNameForModifcation = exportNameForModification;
            System.out.println("_exportNameForModifcation : " + _exportNameForModifcation);
            documentFieldAlreadyTicked = getExportService().getDocumentFields(exportNameForModification);
     
            HttpServletRequest req = requestGlobals.getHTTPServletRequest();
            List<String> selectedDocumentFields = new LinkedList<String>();
    sur le onSuccess() :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
            HttpServletRequest req = requestGlobals.getHTTPServletRequest();
            String[] exportToCreate = req.getParameterValues("selectedDocumentFields");
     
            System.out.println("exportToCreate : " + exportToCreate);       
            _formFieldsToCreate = Arrays.asList(exportToCreate);
     
            getExportService().modifyExportProfil(_profilName, _language, _formFieldsToCreate);
     
            //return this;
            return null;
    sur le getDocumentField()
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    public ExportDocumentField getDocumentField() {
            System.out.println("_documentField : " + _documentField);
            if (documentFieldAlreadyTicked.contains(_documentField)) {
                _documentField.setChecked("true");
                System.out.println(documentFieldAlreadyTicked + " contains " + _documentField);
            }
            else {
                System.out.println(documentFieldAlreadyTicked + " does not contains " + _documentField);
                _documentField.setChecked(null);
            }
     
            return _documentField;
        }
    Tout d'abord à mon avis ça pue du cul parce que le getDocumentField() est appelé plein de fois pour le display --> plus de fois que le nombre de champs présents dans la page.
    Est ce une bonne pratique de partir sur ce type de coding avec T5 ?

    Si je pars sur le fait d'utiliser un composant t:checkbox je m rend compte qu'il n'y a pas la propriété comme dans T3 pour savoir lequel est selected (http://tapestry.apache.org/tapestry5.../Checkbox.html)

    On a juste value :
    value boolean Required, NOT Allow Null
    prop
    The value to be read or updated. If not bound, the Checkbox will attempt to edit a property of its container whose name matches the component's id.

    Pourriez-vous m'aider à débloquer cette situation ?

    Merci d'avance.

  2. #2
    Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2011
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2011
    Messages : 36
    Points : 62
    Points
    62
    Par défaut
    Bonjour,

    Je débute avec tapestry et j'ai également souhaité utiliser des checkbox multiple mais comme toi je n'ai pas trouvé ce qu'il fallait dans tapestry ...
    j'ai donc utilisé ta solution : lire directement dans le post. Pour moi ca fonctionne nikel.

    Depuis le temps je suppose que tu as résolu ton soucis.

    Je post quand même un petit recap de ce que j'ai fait pour aider les prochains.

    Creation des checkbox :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <t:loop source="listObjets" value="objetUnitaire">
        <input type="checkbox" name="maChckBox" value="${objetUnitaire.id}"></input>
    </t:loop>
    Dans la methode onSubmitFromMonFormulaire() :
    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
    final HttpServletRequest req = requestGlobals.getHTTPServletRequest();
    if (req != null) {
    	final String[] ids = req.getParameterValues("maChckBox");
    	if (ids != null) {
    		for (String s : ids) {
    			try {
    				final Integer i = Integer.parseInt(s);
    				// i contient l'id de ce qui a été coché (pour moi un Integer) il suffit de le sauvegarder dans ce que vous souhaitez
    				this.getListId().add(i);
    			} catch (NumberFormatException e) {
    				logger.info("onSuccess : un element de maChckBox de la requette http n'est pas un nombre !");
    				continue;
    			}	
    		}
    		return pageAAfficher;
    	} 
    }
    return this;
    @ plus

Discussions similaires

  1. [JSP]checkbox
    Par orisis dans le forum Servlets/JSP
    Réponses: 6
    Dernier message: 16/04/2013, 13h53
  2. [VB.NET] Insérer une colonne de CheckBox dans un DataGrid
    Par Manue.35 dans le forum Windows Forms
    Réponses: 2
    Dernier message: 22/05/2003, 11h44
  3. Checkbox
    Par rgarnier dans le forum XMLRAD
    Réponses: 11
    Dernier message: 06/03/2003, 10h48
  4. Couleur d'un CheckBox
    Par benj63 dans le forum C++Builder
    Réponses: 4
    Dernier message: 15/07/2002, 14h48
  5. CheckBox en Read Only
    Par MrJéjé dans le forum C++Builder
    Réponses: 7
    Dernier message: 23/06/2002, 15h00

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