Si vous avez l'habitude de rajouter des fichiers Javascript ou CSS à vos pages depuis vos composants Wicket, vous avez sûrement déjà utilisé la méthode getHeaderContribution :

  1. add(JavascriptPackageResource.getHeaderContribution(MyComponent.class, "js/MyComponent.js"));

Ou encore, sur les anciennes version de Wicket :

  1. add(HeaderContributor.forJavaScript(MyComponent.class, "MyComponent.js");

Cependant, les fichiers Javascript (ou CSS) sont ajoutés tel quels. Nous allons voir ici comment personnaliser ces fichiers, en rajoutant des variables à nos fichiers initialement statiques.

Nous allons pour cela utiliser un TextTemplateHeaderContributor à la place de notre HeaderContributor, en passant un modèle contenant la liste de nos variables.

  1. IModel<Map<String, Object>> variablesModel = new AbstractReadOnlyModel<Map<String, Object>>() {
  2.  
  3. private Map<String, Object> variables;
  4.  
  5. public Map<String, Object> getObject() {
  6. if (variables == null) {
  7. this.variables = new MiniMap<String, Object>(3);
  8. variables.put("markupId", MyComponent.this.getMarkupId() );
  9. variables.put("height", calculateHeight() );
  10. variables.put("width", calculateWidth() );
  11. }
  12. return variables;
  13. }
  14.  
  15.  
  16. };
  17.  
  18. add(TextTemplateHeaderContributor.forJavaScript(MyComponent.class, "js/MyComponent.js", variablesModel));

Ensuite, il est facile de récupérer la valeur de nos variables dans notre fichier Javascript :

  1. $(function() {
  2. $("#${markupId}").dialog({
  3. height: ${height},
  4. width: ${width}
  5. });
  6. });

Nous verrons un cas d'application avec les templates Javascript et JQuery dans un prochain article.