Подход к проектированию View в vaadin 7

Я новичок в vaadin. Мне нужно разработать PoC на vaadin. Сервисный слой уже написан с использованием Spring. В рамках Poc я должен разработать скрин ниже.

введите здесь описание изображения

Когда запрос поступает в мой класс пользовательского интерфейса, он вызывает мой вид с помощью навигатора. Это представление состоит из одной вкладки, и каждая вкладка имеет свою собственную функциональность и также зависит от значений других вкладок. Первая вкладка — это вкладка поиска. Он отображает все записи, полученные из БД, в области содержимого вкладки (аддон Table/Grid. Я не знаю, что использовать). Каждая запись имеет доступ к двум другим вкладкам. На двух других вкладках есть поля для сопоставления свойств каждой записи. На данный момент я взял фиктивные данные для отображения.

Я написал мнение так. Но я запутался, правильный ли этот подход или нет.

@VaadinView(UserView.NAME)
public class UserView extends VerticalLayout implements View {

public static final String NAME = "user";

public UserView(){

    // For Tabs
    TabSheet tabs = new TabSheet();

    // first tab component
    VerticalLayout layout = new VerticalLayout();

    // for search fields
    HorizontalLayout searchArea = new HorizontalLayout();
    FormLayout searchAreaName = new FormLayout();
    TextField name = new TextField("name");
    FormLayout searchAreaEmail = new FormLayout();
    TextField email = new TextField("email");
    searchAreaName.addComponent(name);
    searchAreaEmail.addComponent(email);
    searchArea.addComponent(searchAreaName);
    searchArea.addComponent(searchAreaEmail);

    // for search table
    BeanContainer<String, test.User> users = new BeanContainer<String, User>(
            User.class);
    users.setBeanIdProperty("userId");
    users.addBean(new User("sudheer", "[email protected]", "1"));
    users.addBean(new User("sridhar", "[email protected]", "2"));
    users.addBean(new User("ranga", "[email protected]", "3"));

    Table table = new Table("", users);
    table.setSizeFull();
    table.setPageLength(6);

    layout.addComponent(searchArea);
    layout.addComponent(table);
    Tab tabOne = tabs.addTab(layout, "User Search", null);

    // second tab component
    VerticalLayout userLayout = new VerticalLayout();
    userLayout.addComponent(new TextField("user name"));
    userLayout.addComponent(new TextField("email"));
    tabs.addTab(userLayout, "main details", null);

    // tab change event

    addComponent(tabs);
    tabs.setHeight("50%");
    tabs.setWidth("50%");
    setComponentAlignment(tabs, Alignment.MIDDLE_CENTER);
}

@Override
public void enter(ViewChangeEvent event) {

}
}

Я также не реализовал разбиение на страницы. Прежде чем двигаться вперед, я хотел бы узнать о других лучших подходах.

Любые предложения мне очень помогут. Заранее спасибо.

Кто-нибудь .. пожалуйста, помогите мне. Я иду вслепую со своим подходом


person Sudheer Kumar    schedule 07.08.2014    source источник
comment
Я обычно использую подокно для отображения/редактирования сведений о записи таблицы вместо вкладок.   -  person Jose Luis Martin    schedule 07.08.2014


Ответы (1)


Вот что я делаю в таких случаях: Используйте шину событий Blackboard для запуска событий. Эти события несут полезную нагрузку, которая по сути является идентификатором записи, на которую нажали/выбрали. Другие вкладки или представления регистрируются как слушатели этого события. Когда событие запускается, прослушиватели извлекают идентификатор записи/сущности из полезной нагрузки, извлекают объект сущности из серверной части и отображают его соответствующим образом.

Такой подход обеспечивает слабосвязанные компоненты.

Я надеюсь, что это помогает.

person Vikrant Thakur    schedule 18.09.2014
comment
Привет, Викрант, я надеюсь, что этот процесс уменьшит количество обращений к серверу. Разве нет? Получение одной и той же записи в двух представлениях. - person Sudheer Kumar; 20.02.2015
comment
1. События Blackboard запускаются на самом сервере, а не на клиенте (браузере). То, что перемещается туда и обратно (браузер и сервер), — это просто щелчки мышью и кнопкой, а также данные домена (одна или несколько записей с использованием JSON). Какая бы тяжелая обработка ни была, она существует на сервере, поэтому никаких тяжелых циклов. 2. Нет необходимости дважды получать одну и ту же запись. Вы можете передать саму запись (экземпляр сущности) в качестве полезной нагрузки события доски. 3. Вы можете получить представление, просмотрев рабочую демонстрацию здесь: [ссылка] (117.55.242.133:8080/sheriffinfo) напишите мне для получения учетных данных [email protected] - person Vikrant Thakur; 21.02.2015