Если вы что-то знаете о Wicket, вы знаете, что они только что выпустили
Wicket 1.4, который предлагает некоторые очень приятные улучшения и структурные изменения, которые делают его еще более привлекательным для работы с фреймворком. Еще в марте этого года мы принесли вам
5 дней калитки , поэтому в сегодняшнем сообщении мы обновили образец приложения, доступного в Интернете на
MysticPaste.com, до версии 1.4.
Изменения зависимостей
Во-первых, используйте Maven , это просто облегчит жизнь. Поскольку образец приложения использует Spring, я также включу изменения, которые вы должны внести в файл pom.xml для версии 1.4:
<dependency>
<groupId>org.apache.wicket</groupId>
<artifactId>wicket</artifactId>
<version>1.4.0</version>
</dependency>
<dependency>
<groupId>org.apache.wicket</groupId>
<artifactId>wicket-ioc</artifactId>
<version>1.4.0</version>
</dependency>
<dependency>
<groupId>org.apache.wicket</groupId>
<artifactId>wicket-spring</artifactId>
<version>1.4.0</version>
</dependency>
Библиотека wicket-spring-annot устарела в пользу wicket-ioc и wicket-spring, и простое изменение версии на 1.4.0 для всех артефактов ядра калитки должно сработать.
конфигурация
Хотя это может не охватывать каждый случай, единственный элемент конфигурации, который нам требовался, — это изменение контекста-параметра, определяющего режим разработки / развертывания:
<context-param>
<param-name>configuration</param-name>
<param-value>DEPLOYMENT</param-value>
</context-param>
становится
<context-param>
<param-name>wicket.configuration</param-name>
<param-value>DEPLOYMENT</param-value>
</context-param>
Обескураживания… прощай, старые друзья
В примерах мы используем HeaderContributor для ссылки на несколько файлов CSS, и это не рекомендуется в пользу:
add(JavascriptPackageResource.getHeaderContribution(MYPAGE_JS));
add(CSSPackageResource.getHeaderContribution(MYPAGE_CSS));
Мы также использовали простой DefaultDataProvider для нашего DataView на странице истории, и это тоже было сокращено. Нашим решением для этого было просто реализовать IDataProvider:
public class HistoryDataProvider implements IDataProvider<PasteItem> {
...
public Iterator<PasteItem> iterator(int first, int count) {
try {
return pasteService.getLatestItems("web", count, first, false).iterator();
} catch (InvalidClientException e) {
e.printStackTrace();
}
return null;
}
public IModel<PasteItem> model(PasteItem pasteItem) {
return new Model<PasteItem>(pasteItem);
}
/**
* @see org.apache.wicket.model.IDetachable#detach()
*/
public void detach() {
}
}
Как и в большинстве фреймворков в 1.4, все было обобщено, поэтому вместо повсеместного преобразования вы просто генерируете везде =).
Изменения компонентов
С помощью Link вы можете передать Model, а BookmarkablePageLink выходит из Link, поэтому, если вы хотите, чтобы ваш код был красивым и чистым, поскольку он не нужен:
BookmarkablePageLink<Void> myLink = new BookmarkablePageLink<Void>("myWicketId", MyWicketPage.class);
Компонент также изменился, и они удалили методы .setModel и .getModel в пользу .getDefaultModel и .setDefaultModel. Насколько я понимаю, потому что IModel был обобщен, вдруг все компоненты должны были быть обобщены, и это было бы плохо. Для получения дополнительной информации на этой вики-странице Wicket о миграции на Wicket 1.4 . Вот несколько примеров блоков из примера приложения, которые мы изменили для поддержки обобщений:
add(new CheckBox("twitter", new PropertyModel<Boolean>(PasteForm.this, "twitter")));
...
add(new TextField<String>("email", new PropertyModel<String>(PasteItemPage.this, "spamEmail")));
...
markAbuseLabel.setDefaultModel(new Model<String>("Marked As Spam"));
...
CommentListModel commentListModel = new CommentListModel(pasteModel.getObject().getId());
final ListView<PasteComment> commentList = new ListView<PasteComment>("commentList", commentListModel) {
@Override
protected void populateItem(final ListItem<PasteComment> item) {
...
RequiredTextField<String> commentEmail = new RequiredTextField<String>("email");
В целом и во всем коде вещи кажутся чище и с ними приятнее работать. Если вы хотите более подробно взглянуть на код, вы можете просмотреть его на нашей странице проекта Kenai . Как всегда, мы приветствуем любые комментарии, и если мы сделали бу-бу в нашей конверсии, пожалуйста, дайте нам знать. Все сказали, что преобразование кодовой базы заняло около 30 минут, и, поскольку оно маленькое, это имеет смысл. Если вам нужна более подробная информация, пожалуйста, проверьте постоянно развивающуюся миграцию Wicket на 1.4 в вики.
Удачного кодирования!