Как изменить расположение файла html в Wicket

Как изменить расположение html файла в Wicket

Wicket требует, чтобы файлы html и java располагались в одном каталоге пакета. Здесь мы покажем вам, как поместить файл java и html в другой каталог.

Например,

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

Согласно Wicket in Action

Метод Wicket по умолчанию для поиска ресурсов позволяет быстро переключаться между файлами Java и файлами разметки во время разработки, поскольку они находятся рядом друг с другом. Кроме того, с помощью этого алгоритма компоненты вашего пакета можно сразу повторно использовать без необходимости настраивать пользователям, откуда загружаются шаблоны; если класс компонентов может быть найден в пути к классам, их ресурсы тоже. Это мощный инструмент по умолчанию, и вы можете дважды подумать, прежде чем реализовывать что-то нестандартное.

Калитка 1.3

Если вы все еще настаиваете на настройке пути к ресурсам, здесь я предлагаю 2 способа сделать это в Wicket 1.3.

1. Найдите ресурс с веб-контекстом

Создайте класс, который расширяет классResourceStreamLocator, и переопределите следующую функцию

  1. найти (Класс clazz, Строковый путь)

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

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. Найдите ресурс с помощью ResourceFinder

Создайте класс, который расширяет классResourceStreamLocator и переопределяет следующие две функции

  1. locate (класс clazz, путь к строке, стиль строки, языковой стандарт локали, расширение строки)

  2. locateByResourceFinder (класс clazz, путь к строке)

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

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

Готово.

Скачать -Wicket-1.3-Resource-Loading.zip (7 КБ)

Калитка 1.4

Для Wicket 1.4 все проще. См. Следующую структуру каталогов:

  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

Вы можете настроить, где html загружается в методеinit() следующим образом:

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

    }
}

Скачать -Wicket1.4-resource-loading.zip (8 КБ)

Maven ways
В качестве альтернативы вы можете контролировать, куда загружаются файлы HTML, с помощью тега ресурсов Maven следующим образом:

Файл: pom.xml


    
        WicketExamples

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

    

В Maven нет необходимости переопределять метод WebApplicationinit().