Wicket: comment rendre une page par programme et obtenir un résultat sous forme de chaîne?

Je suis en train de convertir une application pour qu’elle utilise i18n / l10n sur toutes ses pages. Je suis très heureux du soutien de Wicket pour cela, et tout va bien jusqu’à présent. La partie la plus délicate que j’ai rencontrée est la suivante:

Nous avons un fichier texte utilisé comme modèle HTML pour envoyer un courrier électronique lorsque les utilisateurs effectuent une opération donnée sur le site. Lorsque l’utilisateur clique sur un lien particulier, je lis manuellement ce modèle, effectue des substitutions de texte telles que "Dear $USERNAME" et envoie le résultat sous forme de courrier électronique HTML à l’utilisateur.

Afin de prendre en charge la dizaine de langues que nous ciblons, je dois soit conserver 10 copies de ce fichier modèle, soit trouver un moyen de rendre cette “page” à l’aide du support i18n intégré de Wicket, puis saisir le résultat. comme une chaîne, puis l’envoyer.

D’où ma question : comment puis-je “rendre” une page Wicket par programme et obtenir le résultat sous forme de chaîne?

Je préférerais éviter les bidouilles comme utiliser HttpClient si possible; HttpClient n’aura pas les parameters régionaux de l’utilisateur, ne sera pas automatiquement connecté en tant qu’utilisateur, etc., de sorte que cela ne semble pas être une bonne solution pour moi.

Deux articles à ce sujet:

Rendre une page Wicket en chaîne pour un courrier électronique HTML

Rendre le panneau en chaîne

Actuellement, la seule autre approche utilisait WicketTester pour cela, mais je ne me souviens pas des détails pour le faire.

Si vous voulez juste le code brut, le voici: (C’est pratiquement la même chose que la solution décrite dans l’article.)

 //I assumed that you want to use the current user's session for rendering. If this isn't the case, you'll have to use a mock session MockHttpServletRequest mockReq = new MockHttpServletRequest( WebApplication.get(), ((WebRequest)getRequest()).getHttpServletRequest().getSession(), WebApplication.get().getServletContext() ); MockHttpServletResponse mockRes = new MockHttpServletResponse( mockReq ); WebResponse res = new WebResponse(mockRes); ServletWebRequest req = new ServletWebRequest( mockReq ); RequestCycle cycle = new WebRequestCycle( WebApplication.get(), req, res ); PageParameters pp = new PageParameters(); //add page parameters here //Your email page should really be a bookmarkable page, but if it isn't, you can replace the request target with something that better suits your case cycle.request( new BookmarkablePageRequestTarget( EmailPage.class, pp )); System.out.println( mockRes.getDocument() ); 

Pour les nouvelles versions de Wicket: 6.7.0 est venu avec un nouveau ComponentRenderer précisément à cette fin!