среда, 29 июля 2009 г.

This widget's parent does not implement HasWidgets

Если в GWT виджет не содержит родителя (parent), мы можем спокойно добавлять его и использовать в панелях, других GWT-native виджетах и т.д. К примеру, вы создали Image:


Image img = new Image("some url");

а после добавили его в панель:


AbsolutePanel panel = new AbsolutePanel();
panel.add(img);

Этот код выполнится без проблем, т.к. img вообще не содержит родителя.

Но если у виджета будет родитель, отношения с ним несколько обостряются. Представим себе простой Composite виджет включающий в себя Image:

class MyComposite extends Composite {

public Image img = new Image();
public MyComposite() {
initWidget(img);
}
}

Теперь если мы добавим, скажем,в AbsolutePanel картинку из MyComposite, получим то самое сообщение: This widget's parent does not implement HasWidgets


среда, 22 июля 2009 г.

Eclipse workflow

При написании кода я практикую TDD, поэтому для меня очень важно запускать все unit тесты очень часто. Для того чтобы это делать в Eclipse мы можем создать Junit конфигурацию запуска, и запускать последнюю конфигурацию запуска через шорткаты (если честно, я только запуск юнит тестов в качестве конфигурации запуска и использую - остальное в build.xml). По умолчанию это Ctrl+F11.

Единственное что меня досаждало - после того как мы выполним эту команду на юнит тесте, последней конфигурацией запуска становилось выполнение этого одного юнит теста. И потом приходилось снова лезть в меню или тыркать мышкой по запуску всех юнит тестов.

Рецепт: Настройки-> Run/Debug -> Launching и в группе Launch Operation ставим Always launch the previously launched application.

В Intellij Idea есть замечательная убийственная штука как автодополнение выражения. Подход Eclipse немного отличается.

Рецепт: В настройках Java -> Typing -> Automatically insert at correct position. Ставим галочки для "}" и ";". Теперь в любом месте строки вставка этих символов приведет к их расположению в конце строки.