Динамическое меню GWT из файла XML. Как отразить класс Composite? - PullRequest
3 голосов
/ 03 июня 2009

Я пытаюсь создать динамическое меню в GWT, читая его из файла XML. XML-файл должен содержать имя кнопки и действие (связанный композит, который будет добавлен на горизонтальную панель).

Чтобы совершить действие, нужно сделать Reflection of the Class, желание доставило мне много проблем. Я пробовал 2 разных решения, на стороне клиента и на стороне сервера. На стороне клиента я пробовал библиотеки "gwt-ent" и "gwt рефлексия", но у меня много ошибок и необходимо установить, какие классы будут отображаться (чего я не хочу, потому что я хочу динамическое меню, а не полудинамическое). На серверной стороне я пытался вернуть меню, но невозможно иметь дело с клиентскими виджетами на серверной стороне. Поэтому я попытался отразить отражение и вернуть экземпляр клиенту, но на стороне сервера невозможно получить класс на стороне клиента.

Кто-нибудь знает другое решение? Я делаю что-то не так? Как я могу отразить класс, чтобы поместить Composite на горизонтальную панель?

Спасибо за вашу помощь. С уважением.

1 Ответ

1 голос
/ 20 августа 2009

Один из подходов состоит в том, чтобы ваш код на стороне сервера создавал «фабричный» экземпляр, который будет создавать соответствующие виджеты на стороне клиента. Эта «фабрика» затем сериализуется клиенту (теперь это DTO). Примерно так:

public interface WidgetFactory {
    public Widget createWidget();
}

public class MenuOptionDTO implements Serializable {
    public String optionText;
    public WidgetFactory widgetFactory;
}

public class WidgetOnMenu extends Composite {
    ...
    public static class Factory implements WidgetFactory, Serializable {
        public Widget createWidget() {
            return new WidgetOnMenu();
        }
    }
    ...
}

Вы можете использовать обычное отражение на стороне сервера для создания экземпляров вашего WidgetFactory.

<menu>
    <option text="Option1" factory="com.acme.WidgetOnMenu.Factory"/>
</menu>

Этот подход используется структурой GWT Portlets .

...