Wicket предназначен для разработки web приложений, но это не совсем template framework, это больше (что-то типа React? Vue? Очень примитивно работа React выглядит так. Есть View, Action, State. View вызывает Acton, который меняет State, а View отслеживает изменения в State. В Wicket примерно также: View отслеживает изменения в Model).
Примеры из книги "Wicket in action": Wicket test examples на моем github. Не все примеры, только несколько, для того, чтобы понять работу Wicket. Все примеры в https://github.com/perty/wicket-test-examples
Установки:
vasi-note:~/prog/java/wicket/Wicket-tutorial-examples/HelloWorldExample echo $JAVA_HOME /usr/lib/jvm/java-17-openjdk-amd64
изменил в pom.xml:
<packaging>war</packaging>;
и в pom.xml добавил:
<plugin> <groupId>org.apache.tomcat.maven</groupId> <artifactId>tomcat7-maven-plugin</artifactId> <version>2.2</version> <configuration> <!-- http port --> <port>9090</port> <!-- application path always starts with /--> <path>/</path> <contextReloadable>true</contextReloadable> </configuration> </plugin>
Связь Java файла и HTML представления делается следующим образом. Путь Java, его package, должен соответствовать пути HTML файла в resources:
Запуск:
$ mvn jetty:run
Запуск в режиме разработки:
$ mvn -Dwicket.configuration=deployment jetty:run
Открыть http://127.0.0.1:8080/wicket-test-examples/
Примеры:
Stateless(bookmarkable) и Statefull страницы в Wicket:
Wicket хранит последнюю просмотренную страницу в сессии. Stateless(bookmarkable) page — это страница не имеющая состояния, Statefull page — это страница с состоянием.
При каждом запросе к Stateless page, её экземпляр создаётся заново. К Statefull page присваивается версия. Чтобы страница стала stateless необходимо выполнить два условия:
- В первую очередь страница должна быть bookmarkable.
- Страница должна использовать только stateless компоненты.
Bookmarkable pages and links
Класс stateless страницы должен иметь пустой конструктов или конструктор, который принимает PageParameters аргумент (который оборачивает аргументы запроса к странице). В случае если класс имеет оба конструктора, то при создании страницы по умолчанию будет использоваться конструктор с параметрами. И еще: если на странице используется хотя бы один компонент, который не является stateless, то вся страница становится statefull, и полностью сериализуется и сохраняется в сессии и далее в истории на диске. Если страница не имеет конструктора с параметрами, то при переходе на страницу будет использован конструктор без параметров (без каких-либо ошибок и предупреждений), потому что wicket не проверяет, действительно ли для нее существуют параметры запроса, и wicket не знает, действительно ли они предназначены для этой страницы или нет.
Переход на stateless страницу:
new Link() { public void onClick() { setResponsePage(new MyPage(...)); // stateless page } }
Тестирование
Тестировать html страницы можно с использованием встроенных инструментов Wicket https://cwiki.apache.org/confluence/display/WICKET/Unit+Test или других. На пример https://jsoup.org/.
Пример для теста:
Document doc = Jsoup.connect("https://en.wikipedia.org/").get(); log(doc.title()); Elements newsHeadlines = doc.select("#mp-itn b a"); for (Element headline : newsHeadlines) { log("%s\n\t%s",headline.attr("title"), headline.absUrl("href")); // тесты headline.attr("title"), headline.absUrl("href") }
Ссылки на примеры использования jsoup:
Альтернативы Wicket:
Spring MVC
Vaadin:
Vaadin (код java компилируется в js с помощью компилятора Vaadin Compiler, основанного на Google Web Toolkit (GWT))
Vaadin demo
https://www.baeldung.com/vaadin
FreeMarker и Spring MVC
Eclipse RAP:
Eclipse RAP
Ссылки:
Wicket test examples на моем gihub
Apache Wicket User Guide - Reference Documentation
Примеры Wicket
https://github.com/apache/wicket
https://mkyong.com/tutorials/wicket-tutorials/
Examples from Apache Wicket Cookbook
github 55 Minutes Wicket Project (Репозиторию 12 лет. "...This project requires JDK 6 and Wicket 1.5. Not compatible with Wicket 6...")
github Wicket+Bootstrap
github Wicket 10+Bootstrap 5.x
Enhance Wicket With Spring Boot
Wicket in action
Getting Started with Apache Wicket (DZone Refcard)
Stateless и Statefull страницы в Wicket 1.4 (Habr)