2010-10-30 15 views
6

Sto costruendo un sito in Wicket. Devo pubblicare un file JavaScript, xyz.js, affinché altre persone/siti Web leggano direttamente — ovvero non essere incluso in una delle mie pagine HTML.Come posso pubblicare un file JavaScript dinamico da Wicket?

xyz.js ha bisogno di alcuni contenuti dinamici basati sullo path_info fornito durante la richiesta, quindi deve essere un modello che può essere interpolato.

C'è un modo per me di creare e pubblicare questo file JS utilizzando Wicket?

In caso negativo, qual è la migliore soluzione alternativa? Un file JSP?

risposta

5

EDIT: Nella mia risposta iniziale ho trascurato il requisito di rendere questo file JavaScript disponibile dall'URL pubblico. Mentre cercavo un modo per farlo, mi sono reso conto che il mio intero approccio era imperfetto. Quindi, trasferisco la mia risposta originale fino alla fine e fornisco una risposta più puntuale qui.

Sulla fine di pubblicare una risorsa di testo su un URL pubblico (JavaScript o CSS), è necessario modificare il metodo di init() in WicketApplication aggiungendo:

String resourceKey = "DYN_RES_KEY"; 
//load your text template 
final TextTemplate textTemplate = new PackagedTextTemplate(MyPage.class, "script.js", "text/javascript", "UTF-8"); 
//add the resource 
getSharedResources().add(resourceKey, new Resource() { 
    @Override 
    public IResourceStream getResourceStream() { 
     String queryParam = getParameters().getString("paramName"); 
     //...do whatever you need with the parameters... 
     Map<String,Object> vars = new HashMap<String,Object>(); 
     vars.put("param", queryParam); 
     String stringValue = textTemplate.asString(vars); 
     return new StringResourceStream(stringValue, textTemplate.getContentType()); 
    } 
}); 
//mount the resource at some public URL 
mountSharedResource("/resource", Application.class.getName() + "/" + resourceKey); 
//make alias, optional 
getSharedResources().putClassAlias(MyPage.class, "scripts"); 

NOTA BENE: Questo codice non è scritto in IDE e mai corso. In quanto tale, potrebbe anche non essere compilato. Tuttavia, dovrebbe essere sufficiente per illustrare il modo in cui ciò potrebbe essere realizzato.

Questa risposta è basata su "Dynamically Generate a CSS Stylesheet" e "Wicket Dynamic Image URL", vedere tali fonti per ulteriori dettagli.

RISPOSTA ORIGINALE (utile se si desidera aggiungere JavaScript o CSS che esternamente file con riferimento alla tua pagina Wicket, ma non renderlo pubblicamente visibile):

Partenza "Dynamically Generate a CSS Stylesheet" pagina in Wicket wiki e WICKET-2890 problema in JIRA. Da Wicket 1.4.10, la classe TextTemplateResourceReference fa ora parte del core Wicket, quindi non è più necessario copiarla e incollarla.

La pagina wiki menziona la pagina CSS, ma l'approccio è lo stesso per JavaScript o qualsiasi altro contenuto di testo senza markup.

+0

Ciao, come fai quindi a chiamare quel css/javascript da un altro sito? Le istruzioni mostrano solo come includerlo nelle tue pagine. Grazie, Tom – Tom

+0

ha modificato la mia risposta –

+0

Ciao Neeme - grazie per quello - lo proverò. – Tom

Problemi correlati