Comment changer l’emplacement du fichier html dans Wicket

Comment changer l'emplacement du fichier html dans Wicket

Wicket nécessite des fichiers html et java situés dans le même répertoire de package. Ici, nous vous montrons comment placer le fichier java et html dans un répertoire différent.

Par exemple,

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

Selon Wicket en action

La méthode par défaut de localisation des ressources de Wicket vous permet de basculer rapidement entre les fichiers Java et les fichiers de balisage pendant le développement, car ils sont juste à côté les uns des autres. De plus, avec cet algorithme, les composants de votre package sont immédiatement réutilisables sans que les utilisateurs aient à configurer l'emplacement à partir duquel les modèles sont chargés; si la classe des composants peut être trouvée dans le chemin de classe, leurs ressources le peuvent aussi. Il s'agit d'un paramètre par défaut puissant, et vous voudrez peut-être réfléchir à deux fois avant de mettre en œuvre quelque chose de personnalisé

Wicket 1.3

Si vous insistez toujours pour personnaliser le chemin des ressources, je propose ici 2 façons de le faire dans Wicket 1.3.

1. Localisez la ressource avec le contexte Web

Créez une classe qui étend la classeResourceStreamLocator et remplacez la fonction suivante

  1. localiser (classe clazz, chemin de chaîne)

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

}

Classe d'application Wicket

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. Localisez la ressource avec ResourceFinder

Créez une classe qui étend la classeResourceStreamLocator et remplace les deux fonctions suivantes

  1. localiser (clazz de classe, chemin de chaîne, style de chaîne, paramètres régionaux, extension de chaîne)

  2. LocateByResourceFinder (Classe clazz, chemin de chaîne)

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;
    }
}

Classe d'application Wicket

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

Terminé.

Téléchargez-le -Wicket-1.3-Resource-Loading.zip (7 Ko)

Wicket 1.4

Pour Wicket 1.4, c'est plus simple. Voir la structure de répertoires suivante:

  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

Vous pouvez personnaliser l'emplacement de chargement du html dans la méthodeinit() comme ceci:

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

    }
}

Téléchargez-le -Wicket1.4-resource-loading.zip (8 Ko)

Maven ways
Vous pouvez également contrôler où les fichiers HTML sont chargés via la balise de ressource Maven comme ceci:

Fichier: pom.xml


    
        WicketExamples

        
            
                src/main/resources
            
            
                src/main/webapp/pages
            
        

    

À la manière de Maven, vous n'avez pas besoin de remplacer la méthode WebApplicationinit().