Vaadin Widgetset compilation - Виджет, реализующий внешний интерфейс - PullRequest
0 голосов
/ 12 октября 2011

Мы пытаемся реализовать шаблон MVP, используя собственный виджет Vaadin.Чтобы избежать дублирования интерфейсов, наш первый подход заключался в создании серверного компонента Vaadin для реализации интерфейса представления.Но когда я компилирую набор виджетов, я получаю следующую ошибку:

Widgetset does not contain implementation for com.enterprise.designer.vaadin.widget.workflow.Workflow. Check its @ClientWidget mapping, widgetsets GWT module description file and re-compile your widgetset. In case you have downloaded a vaadin add-on package, you might want to refer to add-on instructions. Unrendered UIDL:
com.enterprise.designer.vaadin.widget.workflow.Workflow(NO CLIENT IMPLEMENTATION FOUND) id=PID2 caption=Editorongo actionCount=1 workflowAction_0_id=1 workflowAction_0_name=addStartNode workflowAction_0_y=75.0 workflowAction_0_x=50.0

Если я комментирую интерфейс (и импорт), он работает нормально, даже если я раскомментирую их после построения набора виджетов.Код (с комментариями импорта / реализации) выглядит следующим образом:

import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
//import com.enterprise.designer.workflow.presenter.WorkflowDrawArea;
//import com.enterprise.platform.i18n.api.Language;
//import com.enterprise.platform.mvp.api.ViewEventNotifier;
//import com.enterprise.platform.r13n.api.Region;
//import com.enterprise.vaadin.mvp.VaadinView;
import com.vaadin.terminal.PaintException;
import com.vaadin.terminal.PaintTarget;
import com.vaadin.terminal.Resource;
import com.vaadin.ui.AbstractComponent;
import com.vaadin.ui.Component;

@com.vaadin.ui.ClientWidget(com.enterprise.designer.vaadin.widget.workflow.client.ui.VWorkflow.class)
public class Workflow extends AbstractComponent 
//implements WorkflowDrawArea.Display, VaadinView 
{
. . .

В журнале не отображается никаких ошибок (за исключением источников для API проверки, но те же ошибки отображаются, когда я комментирую интерфейси работает нормально).Я пробовал как компилировать форму Eclipse плагин и из командной строки.

Есть идеи?Заранее спасибо.

Кросспост: https://vaadin.com/forum/-/message_boards/view_message/817539

Ответы [ 2 ]

0 голосов
/ 18 октября 2011

Если вы думаете, что «НЕ НАЙДЕНА РЕАЛИЗАЦИЯ КЛИЕНТА», это означает, что во время компиляции набора виджетов были некоторые ошибки. У меня та же проблема, осложнение было в порядке, но никакого эффекта для применения. После отладки я обнаружил проблему, в моем приложении использовалась библиотека drools, и внутри этой библиотеки был компилятор с тем же именем, что и в библиотеках gwt-dev, и во время компиляции набора виджетов компилятор использовал неправильный класс для компиляции набора виджетов и в результате компиляция набора виджетов с ошибками. Библиотека Drools в приложении должна быть включена постоянно, и единственным способом решения этой проблемы является компиляция набора виджетов вручную. Если вы используете Eclipse, вы должны добавить в модуль новое «Java-приложение» с:

Проект: {ваш проект}

Основной класс: com.google.gwt.dev.Compiler

Аргументы программы: -gen {местоположение вашего проекта (например, C: \ workspace **)} \ target.generated -logLevel INFO -style OBF -war {местоположение вашего проекта} \ src \ main \ webapp \ VAADIN \ widgetsets -localWorkers 4 {расположение настраиваемого виджета вашего проекта в java-пакетах (например, com. ***. widgetset.CustomWidgetset)}

После этого в путь к классам проекта в «Библиотеки» добавьте внешний jar gwt-dev-2.3.0.jar (или другую версию) поверх всех библиотек, это нужно только для того, чтобы убедиться, что компилятор выбрал правильный класс java и в Изменение «Источник» для всех доступных полей папки «Включено: * / .java» на «Включено: (Все)»

Это должно помочь решить вашу проблему.

0 голосов
/ 13 октября 2011

Я нашел обходной путь.Если я создаю промежуточный класс для виджета, он компилирует ОК.И создание подкласса этого виджета и его использование из приложения Vaadin работает нормально, поэтому я могу создать такой подкласс, реализующий интерфейс из внешнего проекта:

 ________________________________
|com.vaadin.ui.AbstractComponent |
|________________________________|
              ^
             /|\
              |
              |
 ____________________________________________
|com.enterprise.designer.vaadin.widget.Dummy |
|--------------------------------------------|
|     <@com.vaadin.ui.ClientWidget >         |
|____________________________________________|
         ^
        /|\   ______________________________________
         |   | com.enterprise.vaadin.mvp.VaadinView |
         |   |______________________________________|
         |                         ^
         |                        /|\
         |                         | implements
         |                         |
 _________________________________________________________
| com.enterprise.designer.vaadin.widget.workflow.Workflow |
|_________________________________________________________|
    |
    |                  ________________________
    |                 | com.vaadin.Application |
    |uses             |________________________|
    |                           ^
    |                          /|\
    |                           |
    |                           |
 _____________________________________________________
| com.enterprise.designer.vaadin.widget.MyApplication |
|_____________________________________________________|

На этой диаграмме Dummy - это виджет Vaadinкоторый реализует метод paintContent), а Workflow является подклассом, реализующим интерфейс другого проекта (VaadinView).Приложение Vaadin (MyApplication) напрямую использует класс Worflow.

Однако было бы неплохо решить проблему без этого обходного пути:)

...