So ändern Sie den Speicherort der HTML-Datei in Wicket
Für Wicket sind HTML- und Java-Dateien erforderlich, die sich im selben Paketverzeichnis befinden. Hier zeigen wir Ihnen, wie Sie die Java- und HTML-Datei in einem anderen Verzeichnis ablegen.
Zum Beispiel,
-
Index.java located at Project /src/main/java/com/example
-
Index.Html located at Project /src/main/webapp/pages , root context “/” at “/src/main/webapp”.
Laut Wicket in Aktion
Mit der Standardmethode von Wicket zum Auffinden von Ressourcen können Sie während der Entwicklung schnell zwischen Java- und Markup-Dateien wechseln, da diese direkt nebeneinander liegen. Mit diesem Algorithmus können Ihre Paketkomponenten sofort wiederverwendet werden, ohne dass Benutzer konfigurieren müssen, woher die Vorlagen geladen werden. Wenn sich die Klasse der Komponenten im Klassenpfad befindet, können auch ihre Ressourcen gefunden werden. Dies ist eine leistungsstarke Standardeinstellung, und Sie sollten möglicherweise zweimal überlegen, bevor Sie etwas Benutzerdefiniertes implementieren
Wicket 1.3
Wenn Sie immer noch darauf bestehen, den Ressourcenpfad anzupassen, bietet ich hier zwei Möglichkeiten, dies in Wicket 1.3 zu tun.
1. Suchen Sie die Ressource mit dem Webkontext
Erstellen Sie eine Klasse, die die KlasseResourceStreamLocatorerweitert, und überschreiben Sie die folgende Funktion
-
find (Class clazz, String path)
package com.example; import java.net.MalformedURLException; import java.net.URL; import org.apache.wicket.WicketRuntimeException; import org.apache.wicket.protocol.http.WebApplication; import org.apache.wicket.util.resource.IResourceStream; import org.apache.wicket.util.resource.UrlResourceStream; import org.apache.wicket.util.resource.locator.ResourceStreamLocator; import org.apache.wicket.util.string.Strings; public class MyOwnStreamLocator extends ResourceStreamLocator { @Override public IResourceStream locate(Class> clazz, String path) { String location; String extension = path.substring(path.lastIndexOf('.') + 1); String simpleFileName = Strings.lastPathComponent(clazz.getName(), '.'); location = "/pages/" + simpleFileName + "." + extension; URL url; try { // try to load the resource from the web context url = WebApplication.get().getServletContext().getResource(location); if (url != null) { return new UrlResourceStream(url); } } catch (MalformedURLException e) { throw new WicketRuntimeException(e); } // resource not found; fall back on class loading return super.locate(clazz, path); } }
Wicket-Anwendungsklasse
package com.example; import org.apache.wicket.protocol.http.WebApplication; import org.apache.wicket.util.file.WebApplicationPath; public class MyApplication extends WebApplication { public ClassgetHomePage() { return Index.class; } @Override protected void init() { getResourceSettings().setResourceStreamLocator(new MyOwnStreamLocator()); } }
2. Suchen Sie die Ressource mit ResourceFinder
Erstellen Sie eine Klasse, die die KlasseResourceStreamLocatorerweitert und die folgenden beiden Funktionen überschreibt
-
Suchen (Class Clazz, String-Pfad, String-Stil, Gebietsschema-Gebietsschema, String-Erweiterung)
-
locateByResourceFinder (Class clazz, String path)
package com.example; import java.util.Locale; import org.apache.wicket.util.file.IResourceFinder; import org.apache.wicket.util.resource.IResourceStream; import org.apache.wicket.util.resource.locator.ResourceStreamLocator; import org.apache.wicket.util.string.Strings; public class MyOwnFinderStreamLocator extends ResourceStreamLocator { private IResourceFinder resourceFinder; public void addFinder(IResourceFinder resourceFinder) { if (resourceFinder != null) { this.resourceFinder = resourceFinder; } } @Override public IResourceStream locate(Class> clazz, String path, String style, Locale locale, String extension) { String simpleFileName = Strings.lastPathComponent(clazz.getName(), '.') + "." + extension; IResourceStream stream = locate(clazz, simpleFileName); if(stream!=null) return stream; else return super.locate(clazz, path,style,locale,extension); } @Override protected IResourceStream locateByResourceFinder(Class> clazz, String path) { IResourceStream resourceStream = null; resourceStream = resourceFinder.find(clazz, path); if (resourceStream == null) { // try by using class loader resourceStream = locateByClassLoader(clazz, path); } return resourceStream; } }
Wicket-Anwendungsklasse
package com.example; import org.apache.wicket.protocol.http.WebApplication; import org.apache.wicket.util.file.WebApplicationPath; public class MyApplication extends WebApplication { public ClassgetHomePage() { return Index.class; } @Override protected void init() { //resource finder MyOwnFinderStreamLocator resourceStreamLocator = new MyOwnFinderStreamLocator(); WebApplicationPath webContainerPathFinder = new WebApplicationPath(getServletContext()); webContainerPathFinder.add("/pages/"); resourceStreamLocator.addFinder(webContainerPathFinder); getResourceSettings().setResourceStreamLocator(resourceStreamLocator); } }
Erledigt.
Laden Sie es herunter -Wicket-1.3-Resource-Loading.zip (7 KB)
Wicket 1.4
Für Wicket 1.4 ist es einfacher. Siehe folgende Verzeichnisstruktur:
-
Hello.java in /src/main/java/com/example/hello
-
Hello.html in /src/main/webapp/pages/com/example/hello
Sie können festlegen, wo der HTML-Code ininit() Methode wie folgt geladen wird:
package com.example; import org.apache.wicket.Page; import org.apache.wicket.protocol.http.WebApplication; import org.apache.wicket.settings.IResourceSettings; import com.example.hello.Hello; public class MyApplication extends WebApplication { @Override public Class extends Page> getHomePage() { return Hello.class; //return default page } @Override protected void init() { super.init(); IResourceSettings resourceSettings = getResourceSettings(); resourceSettings.addResourceFolder("pages"); } }
Laden Sie es herunter -Wicket1.4-resource-loading.zip (8 KB)
Maven ways
Alternativ können Sie steuern, wo die HTML-Dateien über das Maven-Ressourcen-Tag wie folgt geladen werden:
Datei: pom.xml
WicketExamples src/main/resources src/main/webapp/pages
Auf Maven-Weise müssen Sie die Methode von WebApplicationinit()nicht überschreiben.