2012-05-21 61 views

回答

1

請求對象是availabl e作爲action或render-method的參數以及jsps。您不會對它進行初始化,它只是在那裏(請參閱processAction(ActionRequest請求,ActionResponse響應)的參數,渲染器,事件和資源階段也是如此(儘管與請求/響應的子類型不同。)

+0

當我試試這個: 的ActionRequest請求= NULL; String userId = request.getRemoteUser(); 我得到空指針異常 我需要一個代碼示例! – Jhon

+0

類YourPortlet擴展了GenericPortlet {void processAction(ActionRequest request,ActionResponse response){User currentUser = PortalUtil.getUser(request); ...}} –

+0

當調用processAction函數至極參數應該作爲請求和響應傳遞? ,因爲當將它們聲明爲本地變量時,它期望我初始化變量 – Jhon

0

有你在Vaadin的Portlet(應用嘗試)使用梅索德:?getUser()

Vaadin的Portlet包梁用Vaadin具體框架Liferay的API Vaadin的portlet因此,發展具有本自己的規範,標準的Liferay API在這裏並不是簡單易用的。

3

讓你的Vaadin應用程序執行com.vaadin.terminal.gwt.server.PortletRequestListener,然後你可以訪問th e請求:

public class MyApp extends Application implements PortletRequestListener { 

    public void init() { 
    … 
    } 


    @Override 
    public void onRequestStart(PortletRequest request, PortletResponse response) { 
     User user = PortalUtil.getUser(request); 
     setUser(user); 
    } 

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

    } 
} 
+1

在你的代碼中,用戶是本地的,因此在你的方法之外不可用。你應該給這個添加一個電話。setUser(用戶),以便稍後通過簡單的getUser獲取數據... –

+0

@PATRY這是正確的,我編輯了我的答案。 –

1

我一直在使用Vaadin 6.8.0和Liferay 6.1。以下是使用Henri Kerola解決方案的一些不同的代碼:

@Override 
public void onRequestStart(PortletRequest request, PortletResponse response) { 
    try { 
     this.setUser(request.getUserPrincipal().getName()); 
    } catch (Exception e) { 
     this.setUser("anonymous"); 
    } 
} 

其中,用戶屬性是Vaadin標籤。由於匿名用戶(來自Liferay的訪客)的getUserPrincipal nullPointer,try/catch是必需的。

最好的問候,