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.