получить информацию о пользователе Liferay с Vaadin - PullRequest
2 голосов
/ 16 ноября 2011

Мне нужно проверить в моем портлете язык, который пользователь выбрал в качестве своего "основного" языка, чтобы сделать это, я должен сначала получить идентификатор пользователя (имя).Я искал его в течение двух дней (форумы Liferay, форумы vaadin, stackoverflow и т. д.), но ничего не нашло, что будет работать до сих пор.

Я нашел хороший пример, но он, кажется, не работает (он всегда возвращает «ноль»).

package com.example.translation_portlet;

import javax.portlet.PortletRequest;
import javax.portlet.PortletResponse;


import com.liferay.portal.kernel.exception.PortalException;
import com.liferay.portal.kernel.exception.SystemException;
import com.liferay.portal.model.User;
import com.liferay.portal.util.PortalUtil;
import com.vaadin.Application;
import com.vaadin.terminal.gwt.server.PortletRequestListener;
import com.vaadin.ui.Label;
import com.vaadin.ui.Window;

public class Translation_portletApplication extends Application implements
        PortletRequestListener {

    /**
     * 
     */
    private static final long serialVersionUID = 1L;

    @Override
    public void init() {
        Window mainWindow = new Window("LoginApplication");

        Label label = new Label("Hello anonymous Vaadin user");
        if (getUser() != null) {
            // user has logged in
            label = new Label("Hello " + ((User) getUser()).getFullName());
        }
        mainWindow.addComponent(label);
        setMainWindow(mainWindow);
    }

    @Override
    public void onRequestStart(PortletRequest request, PortletResponse response) {
        if (getUser() == null) {
            try {
                User user = PortalUtil.getUser(request);
                setUser(user);
            } catch (PortalException e) {
                e.printStackTrace();
            } catch (SystemException e) {
                e.printStackTrace();
            }
        }
    }

    @Override
    public void onRequestEnd(PortletRequest request, PortletResponse response) {
        // Nothing to do here currently, exists only to implement the
        // PortletRequestListener interface.
    }

}

РЕДАКТИРОВАТЬ:

это то, что я пробовалдо сих пор:

locale = user.getLocale();
button.setCaption(LanguageUtil.get(locale, "first_name"));

и в моем Language.properties у меня перевод "first_name" установлен на 1st Name:

first_name=1st Name

файл Language.properties находится в моем содержимомПапка, которую я добавил, и ресурс-пакет для моего portlet.xml тоже:

    <resource-bundle>content/Language</resource-bundle>

Для заголовка кнопки задано «first_name», а не 1st name, если я изменяю ключ на first-name, то получаюперевод по умолчанию нет моего перевода из файла language.properties, я что-то упустил?

Ответы [ 3 ]

1 голос
/ 21 мая 2014

Другая возможность:

VaadinSession.getCurrent().getLocale()

Это не происходит из браузера пользователя, но отражает настройки пользователя в liferay.

1 голос
/ 16 ноября 2011

Вы пробовали с

final ThemeDisplay themeDisplay = (ThemeDisplay) request.getAttribute(WebKey.THEME_DISPLAY);
themeDisplay.getUser().getLanguageId();

Необходим импорт

import javax.portlet.PortletRequest;
import com.liferay.portal.kernel.util.WebKeys;
import com.liferay.portal.theme.ThemeDisplay;

EDIT:

Попробуйте с этим

   @Override
public void onRequestStart(PortletRequest request, PortletResponse response) {

            final ThemeDisplay themeDisplay = (ThemeDisplay) request.getAttribute(WebKey.THEME_DISPLAY);
            final User user = themeDisplay.getUser();

            if (user != null) {
                // will be printed to log/console
                System.out.println("User's language id = " + user.getLanguageId());
            } else {
                System.out.println("Guest user.");
            }

            setUser(user);
}

Вы также можете попробовать

@Override
public void init() {
    Window mainWindow = new Window("LoginApplication");

    Label label = new Label("Hello anonymous Vaadin user");
    if (getUser() != null) {
        // user has logged in
        label = new Label("Hello " + ((User) getUser()).getFullName() + ", language id is '" + user.getLanguageId() + "'");
    }
    mainWindow.addComponent(label);
    setMainWindow(mainWindow);
}

EDIT2:

Это полный пример, который работает для меня. Попробуйте, если это не работает, покажите свои portlet.xml, web.xml и liferay-portlet.xml

package com.test;

import java.util.Iterator;

import javax.portlet.PortletRequest;
import javax.portlet.PortletResponse;

import com.liferay.portal.kernel.util.WebKeys;
import com.liferay.portal.model.User;
import com.liferay.portal.theme.ThemeDisplay;
import com.vaadin.Application;
import com.vaadin.terminal.gwt.server.PortletRequestListener;
import com.vaadin.ui.Component;
import com.vaadin.ui.Label;
import com.vaadin.ui.Window;

public class Translation_portletApplication  extends Application implements PortletRequestListener {

    private User m_user;

    @Override
    public void init() {
        Window window = new Window("Vaadin Portlet Application");
        setMainWindow(window);
        String caption = "Hello Vaadin user!";

        if (m_user != null) {
            caption = caption + " with language id '" + m_user.getLanguageId() + "'";
        }
        window.addComponent(new Label(caption));
    }

    @Override
    public void onRequestEnd(PortletRequest p_request, PortletResponse p_response) {
        System.out.println("onRequestEnd");
    }

    @Override
    public void onRequestStart(PortletRequest p_request, PortletResponse p_response) {
        final ThemeDisplay themeDisplay = (ThemeDisplay) p_request.getAttribute(WebKeys.THEME_DISPLAY);
        m_user =  themeDisplay.getUser();
    }
}

EDIT3:

Для получения заголовка из файлов свойств, которые вы можете попробовать (при условии выше класса)

Button button = new Button() {
    @Override
    public void attach() {
        ResourceBundle bundle = ResourceBundle.getBundle(Translation_portletApplication.class.getName(), user.getLocale());
        setCaption(bundle.getString("first_name"));
    }
};
window.addComponent(button);
0 голосов
/ 08 декабря 2011

Если вы запускаете приложение vaadin в portletContext в liferay, вам нужно прослушать прослушиватели портлетов, вот ссылка на пример .

Когда реализован слушатель, вам нужно внедрить слушатель:

  1. handleActionRequest
  2. handleEventRequest
  3. handleRenderRequest
  4. handleResourceRequest

Когда запустилось приложение, запустите метод MainApplication init (), и вы прослушиваете портлет listenert, после того как метод init () автоматически запустит методы listeners. Метод handleRenderRequest u может вызывать request.getRemoteUser (). Он возвращает цифровой номер, то есть идентификатор удаленного пользователя, или ноль, если он не подписан в anybodey.

portletApplicationContext2

...