Изменения режима портлета Vaadin - PullRequest
1 голос
/ 07 октября 2011

У меня есть портлет Liferay Vaadin с двумя режимами: режим редактирования и просмотр.Первое, что я вижу в портлете, это viewContent с меткой: «Не настроен, если портлет не настроен. Теперь, если я настраиваю портлет в режиме редактирования, я вижу материал, который я сделал в конфигурации, он работает до сих пор.но теперь, если я выхожу из системы или перезагружаю браузер (выход и запуск заново), я вижу ненастроенный viewContent с меткой («Not Configured»)

Код:

Window window; // Main Window
VerticalLayout viewContent; // View Mode Content 
VerticalLayout editContent; // Edit Mode Content(Configs)
Label viewText;
Button b;
Panel panel;
Embedded PictureA;

public void init() {
    window = new Window("");
    setMainWindow(window);
    viewContent = new VerticalLayout(); 
    editContent = new VerticalLayout();
    PictureA = new Embedded("", new ExternalResource(PictureAURL));
    PictureA.setType(Embedded.TYPE_IMAGE);

    panel = new Panel();
    panel.setStyleName(Reindeer.PANEL_LIGHT);

    // viewContent
    viewText = new Label("Not Configured" , Label.CONTENT_XHTML);
    viewContent.addComponent(viewText);
    window.setContent(viewContent);

    // EditContent
    b = new Button("PictureA");
    b.addListener(this):
    editContent.addComponent(b);
}

public void buttonClick(ClickEvent event) {
    if (event.getSource == b) {
        viewContent.revomeComponent(viewText);
        panel.addComponent(PictureA);
        viewContent.addComponent(panel);
    }
}

@Override
public void handleRenderRequest(RenderRequest request,
        RenderResponse response, Window window) {

}

@Override
public void handleActionRequest(ActionRequest request,
        ActionResponse response, Window window) {

}

@Override
public void handleEventRequest(EventRequest request,
        EventResponse response, Window window) {

}

@Override
public void handleResourceRequest(ResourceRequest request,
        ResourceResponse response, Window window) {

    // Switch the view according to the portlet mode 
    if (request.getPortletMode() == PortletMode.EDIT) 
        window.setContent(editContent); 
    else if (request.getPortletMode() == PortletMode.VIEW) 
        window.setContent(viewContent);         
}

Ситуация:если я нажимаю кнопку «PictureA», метка «Not Configured» удаляется, а панель с внедренным изображением добавляется в viewContent.

Единственная проблема заключается в том, что она не сохраняется: / Anyидеи? Может я что то забыл?

1 Ответ

4 голосов
/ 07 октября 2011

Да, вы нигде не сохраняете конфигурацию.После завершения сеанса (закрытия браузера) и повторного открытия приложение снова запускается, и восстанавливается исходное состояние «не настроено».

Например, вы можете сохранить его в настройках портлета.В методе handleResourceRequest вы должны захватить дескриптор PortletPreferences:

this.prefs = request.getPreferences();

Чтобы сохранить состояние в обработчике нажатия кнопки, выполните:

this.prefs.setValues("myapp.configured", new String[] {"true"});
this.prefs.store();

Также вы хотите восстановить состояние ужев методе handleResourceRequest.Сделайте что-то вроде:

boolean configured = Boolean.parseBoolean(this.prefs.getValues("myapp.configured", new String[] { "false" })[0]);

if (configured && PictureA.getParent() == null) {
    // PictureA is not visible, but it should be.
    viewContent.removeComponent(viewText);
    panel.addComponent(PictureA);
    viewContent.addComponent(panel);
}
...