So ändern Sie den Speicherort der HTML-Datei in Wicket

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,

  1. Index.java located at Project /src/main/java/com/example

  2. 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

  1. 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 Class getHomePage()
    {
        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

  1. Suchen (Class Clazz, String-Pfad, String-Stil, Gebietsschema-Gebietsschema, String-Erweiterung)

  2. 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 Class getHomePage()
    {
        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:

  1. Hello.java in /src/main/java/com/example/hello

  2. Hello.html in /src/main/webapp/pages/com/example/hello

wicket change html location

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 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.