Bonjour,

J'essaye de créer un nouveau composant qui affiche un label en fonction d'une liste de champ d'un objet.

Cela fonctionne bien comme ça. Cependant je voudrais rajouter des boutons avec une image après le champ pour effectuer diverses opérations.

Je me suis inspiré du composant Palette qui possède un tml avec des boutons et des images, mais le tml de mon composant n'est jamais affiché.

Pourtant si je met une erreur de balise, tapestry me le signale bien.

Le tml
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
 
<div xmlns:t="http://tapestry.apache.org/schema/tapestry_5_0_0.xsd">
 
	<input id="${clientId}" disabled="disabled" name="${controlName}"/>
 
    <button id="select" disabled="disabled">
        <img src="${fetchButton}" alt="fetch"/>
    </button>
 
</div>
 
blavblma
le java
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
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
 
package com.selenar.myapp.components;
 
@SupportsInformalParameters
@IncludeJavaScriptLibrary("fetch.js")
public class Fetch extends AbstractField{
 
    @Parameter(value = "asset:fetch.png")
    @Property(write = false)
    private Asset fetchButton;
 
 
	@Parameter(name = "object", required = true, allowNull = true, defaultPrefix = BindingConstants.PROP)
	private Object object;
 
	@Parameter(name = "label", required = true, allowNull = false, defaultPrefix = BindingConstants.LITERAL)
	private String label;
 
	@Parameter(name = "pk", required = true, allowNull = false, defaultPrefix = BindingConstants.LITERAL)
	private String pk;
 
	@Parameter(name = "class", required = true, allowNull = false, defaultPrefix = BindingConstants.LITERAL)
	private String className;
 
	@Property
	private String clientLabel = null;
 
    protected void beginRender(MarkupWriter writer)
    {
 
    	//traitement pour avoir le label
		//...
 
 
        writer.element("input",
                       "type", "hidden");
        writer.end();
    }
 
    @BeforeRenderBody
    boolean beforeRenderBody()
    {
        return false;
    }
 
    @BeforeRenderTemplate
    boolean beforeRenderTemplate()
    {
        return true;
    }
 
    void afterRender(MarkupWriter writer)
    {
        //writer.end(); // input
    }
 
    @Override
	protected void processSubmission(String elementName) {
		// TODO Auto-generated method stub
 
	}
 
    static String[] splitLabel(String propertyNames)
    {
        String trimmed = propertyNames.trim();
 
        if (trimmed.length() == 0) return new String[0];
 
        return trimmed.split("\\s*,\\s*");
    }
 
 
}
L'appel du composant
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
<t:fetch t:id="res" object="usrDetail.res" class="Res" pk="resPk" label="resLastName,resFirstName"/>
Je me sert de ce composant pour afficher la ressource liée à un utilisateur.

Qu'ais je oublié ?

Merci par avance