Ho appena iniziato a lavorare con Wicket da solo, ma vorrei semplicemente montare la risorsa come risorsa condivisa con il proprio URL. Basta sovrascrivere init()
nel vostro Application
e registrare la risorsa con
getSharedResources().add(resourceKey, dynamicImageResource);
Poi, si monta come una risorsa condivisa con
mountSharedResource(path, resourceKey);
Per qualche ragione, che io ancora non completamente afferrare, avete per anteporre il nome classe dell'applicazione alla chiave della risorsa passata a mountSharedResource()
.
Aggiungiamo un esempio pienamente funzionante per alcuni voti bonus! In primo luogo creare un modello di Wicket vuota con
mvn archetype:create -DarchetypeGroupId=org.apache.wicket \
-DarchetypeArtifactId=wicket-archetype-quickstart \
-DarchetypeVersion=1.4.0 -DgroupId=com.mycompany \
-DartifactId=myproject
Poi, l'override del metodo init()
in WicketApplication
aggiungendo:
@Override
protected void init() {
final String resourceKey = "DYN_IMG_KEY";
final String queryParm = "id";
getSharedResources().add(resourceKey, new Resource() {
@Override
public IResourceStream getResourceStream() {
final String query = getParameters().getString(queryParm);
// generate an image containing the query argument
final BufferedImage img = new BufferedImage(100, 100,
BufferedImage.TYPE_INT_RGB);
final Graphics2D g2 = img.createGraphics();
g2.setColor(Color.WHITE);
g2.drawString(query, img.getWidth()/2, img.getHeight()/2);
// return the image as a PNG stream
return new AbstractResourceStreamWriter() {
public String getContentType() {
return "image/png";
}
public void write(OutputStream output) {
try { ImageIO.write(img, "png", output); }
catch (IOException ex) { /* never swallow exceptions! */ }
}
};
}
});
mountSharedResource("/resource", Application.class.getName() + "/" +
resourceKey);
}
La piccola risorsa PNG dinamica scrive solo il parametro di query su sfondo nero. Naturalmente, puoi accedere al tuo DB o fare quello che vuoi per produrre i dati dell'immagine.
Infine, eseguire mvn jetty:run
e sarà possibile accedere alla risorsa this URL.
E per completare questo: Utilizzo di un IInitializer che implementa la classe e 'getSharedResources(). PutClassAlias (ListInitializer.class," list "); nuovo ListInitializer(). init (this); 'dovresti essere in grado di aggirare l'intero percorso di classe per l'URL dell'immagine. – Tim
Puoi fornire maggiori informazioni, Tim? Non riesco a trovare la classe 'ListInitializer' in Wicket e anche la documentazione disponibile su' putClassAlias' non è utile. – janko
ListInitializer è solo la mia implementazione .. Espanderò il mio esempio in una propria risposta .. – Tim