Ressourcen: Einbinden von Bildern und Style Sheets
Bilder einbinden mit wicket:link
-
In
<wicket:link>-Blöcken werden auch Urls für Bilder automatisch eingesetzt:<wicket:link> <img src="../somepkg/someimage.png"/> </wicket:link>
Resourcen
-
Ressourcendateien in Java-Packages sind aus Sicherheitsgründen standardmäßig nicht per HTTP erreichbar.
-
Mit
ResourceReferencewerden Referenzen auf Ressourcendateien relativ zu einer Java-Klasse beschrieben und dadurch per HTTP erreichbar:new ResourceReference(SomePage.class, "someimage.png")
-
Best Practice: Ein separates
resources-Package mit einerLocator-Klasse für alle Ressourcen anlegen:public class SomeResources { public static final ResourceReference SOME_IMAGE = new ResourceReference(SomeResources.class, "someimage.png"); }
Einbinden von Bildern
-
Bilder können mit der
Image-Komponente eingebunden werden:add(new Image("someImage", new ResourceReference(SomeResources.class, "image.png")))
-
Markup:
<img wicket:id="someImage"/>
-
Ergebnis:
<img src="resources/de.ralfebert.somepkg.SomeResources/someimage.png"/>
Einbinden von Cascading Style Sheets
-
CSS-Dateien können über
Header-Contributionshinzugefügt werden:ResourceReference cssRef = new ResourceReference(SomeResources.class, "shiny.css"); add(CSSPackageResource.getHeaderContribution(cssRef));
-
Ergebnis:
<head> <!-- ... --> <link rel="stylesheet" type="text/css" href="resources/de.ralfebert.somepkg.SomeResources/shiny.css" /> </head>
Dynamische Ressourcen
-
Ressourcen können dynamisch generiert und verlinkt werden:
WebResource helloTextResource = new WebResource() { public IResourceStream getResourceStream() { return new StringResourceStream("Hello!", "text/plain"); } protected void setHeaders(WebResponse response) { super.setHeaders(response); response.setAttachmentHeader("hello.txt"); } }; helloTextResource.setCacheable(false); add(new ResourceLink("someLink", helloTextResource));
-
Downloads können mit dem Content-Type
application/octet-streamerzwungen werden.
Datei Up-/Downloads
-
Ein
FileUploadFieldhandhabt einen Datei-Upload in Formularen:IModel<FileUpload> uploadModel = new Model<FileUpload>(); add(new FileUploadField("uploadField", uploadModel));
-
Die hochgeladene Datei wird im Modell als
FileUploadbereitgestellt:byte[] uploadData = uploadModel.getObject().getBytes();
-
Binärdaten können per
DynamicByteArrayResourcezum Download bereitgestellt werden. -
Bilder können per
DynamicImageResourcezur Anzeige in einerImage-Komponente verwendet werden.
RenderedDynamicImageResource
-
Mit
RenderedDynamicImageResourcekönnen Bilder mitjava.awt.Graphics2Dgezeichnet werden:add(new Image("image", new RenderedDynamicImageResource(200, 50, "png") { @Override protected boolean render(Graphics2D graphics) { graphics.setBackground(Color.WHITE); graphics.fillRect(0, 0, 200, 50); graphics.setColor(Color.RED); graphics.drawLine(0, 0, 200, 50); return true; } }));
Best Practice: Einheitliche Encodings I
-
Unabhängig von der Systemkonfiguration sollten in allen Quelltexten und Dateien eines Projektes ein einheitliches Encoding und einheitliche Zeilenumbrüche verwendet werden.
-
Eclipse Project Settings > Resource > Text file encoding > Other > UTF-8 -
Eclipse Project Settings > Resource > New text file line delimiter > Other > Unix -
Angabe des Encodings in XML-Headern:
<?xml version="1.0" encoding="UTF-8"?> -
Angabe des Encodings in CSS-Headern:
@CHARSET "UTF-8";
Best Practice: Einheitliche Encodings II
-
Das Encoding, mit dem der Java-Compiler arbeitet, wird für Maven Builds in der
pom.xmlkonfiguriert:<build> <plugins> <plugin> <artifactId>maven-compiler-plugin</artifactId> <configuration> <source>1.6</source> <target>1.6</target> <compilerVersion>1.6</compilerVersion> <encoding>UTF-8</encoding> </configuration> </plugin> </plugins> </build>

