2010-10-30 11 views
6

Estoy construyendo un sitio en Wicket. Necesito servir un archivo de JavaScript, xyz.js, para que otras personas/sitios web lean directamente —, es decir, que no se incluya en una de mis páginas HTML.¿Cómo puedo servir un archivo JavaScript dinámico desde Wicket?

xyz.js necesita algunos contenidos dinámicos basados ​​en el path_info que se le proporciona durante la solicitud, por lo que debe ser una plantilla que pueda ser interpolada.

¿Hay alguna manera de construir y servir este archivo JS usando Wicket?

Si no es así, ¿cuál es la mejor solución alternativa? Un archivo JSP?

Respuesta

5

EDIT: En mi respuesta inicial pasé por alto el requisito de hacer que este archivo JavaScript esté disponible desde la URL pública. Mientras buscaba un camino hacia eso, me di cuenta de que todo mi enfoque era defectuoso. Por lo tanto, muevo mi respuesta original hasta el final y proporciono una respuesta más precisa aquí.

El fin de publicar un recurso de texto en una dirección URL pública (JavaScript o CSS), es necesario modificar el método de init() en WicketApplication añadiendo:

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"); 

RENUNCIA: Este código no está escrito en el IDE y nunca corrió. Como tal, es posible que ni siquiera compile. Aún así, debería ser suficiente para ilustrar la forma en que esto podría lograrse.

Esta respuesta se basa en "Dynamically Generate a CSS Stylesheet" y "Wicket Dynamic Image URL", consulte esas fuentes para obtener más detalles.

respuesta original (útil si desea añadir JavaScript o CSS archivo referenciado como externamente a su página de Wicket, pero no que sea visible para el público):

Salida "Dynamically Generate a CSS Stylesheet" página Wicket wiki y WICKET-2890 problema en JIRA. Desde Wicket 1.4.10, la clase TextTemplateResourceReference ahora es parte del núcleo de Wicket, por lo que ya no es necesario copiarlo y pegarlo.

La página wiki menciona la página CSS, pero el enfoque es el mismo para JavaScript o cualquier otro contenido de texto que no sea de marcado.

+0

Hola, ¿cómo se puede hacer una llamada a ese css/javascript desde otro sitio? Las instrucciones solo muestran cómo incluirlo en sus propias páginas. Gracias, Tom – Tom

+0

editado mi respuesta –

+0

Hola Neeme, gracias por eso, lo intentaré. – Tom

Cuestiones relacionadas