2012-03-12 14 views
1

ログされたユーザーの名前をLiferayのポートレットに表示するためのコードを少し書こうとしています。外部ビュー・コンポーネントなしでポートレットを作成する方法

私の問題は、プログラミング上の問題の一部ですが、Javaクラスとview.jspファイルとの間の接続がどれほど正確であるか分かりません。

私は知っており、view.jspファイルだけでユーザー名と写真を表示できますが、Javaクラスも使用できません。

私はprocessAction()メソッドとdoView()メソッドで試してみました。私は、actionResponseの情報をポートレットでレンダリングするための情報を表示するためにパラメータを保存する必要があると思いますが、実際は少し失われて乱雑です。私の質問の1つは、例えば:view.jspファイルにも書くべきでしょうか?または、私はJavaクラスでのみすべてを行うことができますか?私は私のJavaクラスのコードを添付します。

非常に助かります。 事前に感謝します。 ラファは

public class UserInfo extends MVCPortlet{ 

@Override 
public void processAction(ActionRequest actionRequest, ActionResponse actionResponse) 
     throws IOException, PortletException 
     {    
      ThemeDisplay themeDisplay = (ThemeDisplay) 
        actionRequest.getAttribute(WebKeys.THEME_DISPLAY); 
      User user = themeDisplay.getUser(); 

      PortletPreferences prefs = actionRequest.getPreferences(); 
      String userName = (String) actionRequest.getParameter("UserInfo"); 
      userName = user.getFullName(); 

      if (userName != null) 
      { 
       prefs.setValue("UserInfo", userName); 
       prefs.store(); 
      } 

      actionResponse.setRenderParameter("userName", userName); 
      super.processAction(actionRequest, actionResponse); 
    } 
} 

答えて

0

ポートレットのライフサイクルでは、レンダリングプロセスはresourceRequest以外のアクション・プロセスを、次ので、アクション処理が終了した後、doViewメソッドが呼び出されます。そこからhtmlを出力することはできますが、そうすることはお勧めできません。ポートレットクラスは、レンダリング要求を他のJSPにディスパッチするコントローラとして、よりよく扱われます。この方法では、ポートレットクラスを拡張せず、コードを簡単に保守可能にします。

これを行うにはいくつかの方法があります。渡す情報が文字列の場合、ActionResponseを使用してレンダリングパラメータを設定できます。ActionResponse.setRenderParameter(name, value) RenderRequestによって後者が取得されます。渡すオブジェクトがあり、ポートレット・サーバーがポートレット2.0仕様をサポートしている場合は、属性をActionRequestに設定してビュー・コードから読み取ることができます。このようにportlet.xmlファイルでactionScopedRequestAttributesをtrueに設定する必要があります。

<container-runtime-option> 
    <name>javax.portlet.actionScopedRequestAttributes</name> 
    <value>true</value> 
<container-runtime-option> 

側でdoViewメソッドは、呼び出し:

getPortletContext().getRequestDispatcher(jspPage).include(request, response); 

は、あなたがしたいjspページへのリクエストをレンダリング派遣します。

1

はあなたのprocessAction()からの出力ストリームに書き込むことができない点に注意してください - それは、ポートレットのレンダリングフェーズである必要があります。

HTMLの実際の出力を生成する場所について:「サーブレットのレベルを上回る」ことを強く推奨します。 jsp、jsfまたは他の技術を使用することができます。 LiferayのMVCポートレットには、利用してview.jspに行くだけの素敵なデフォルトが用意されています。

outputStream.write( "my html code");この洗練されたレベル以上のものは維持できません。ポートレットは、ビューを必要とし、モデル上で動作するコントローラーと考えることができます。

(コメント以下)編集:

public void doView(
     RenderRequest renderRequest, RenderResponse renderResponse) 
    throws IOException, PortletException { 
    // Note: This is not HTML-escaped. Just for demo. Don't try this at home 
    renderResponse.getWriter().write("The username is " + 
      renderRequest.getParameter("userName")); 
} 
+0

私はあなたが何を意味しているか知っています。私はポートレットについて学んでいますが、私はそれだけで3日間です。私はあなたが推奨するようにいくつかの行でview.jspを使って自分の仕事をしましたが、今でもJavaクラスを使ってそれを達成したいと思います。 – agapitocandemor

+0

ok、私の編集を参照してください –

+0

私はついにこれをしました: PrintWriter writer = response.getWriter(); \t \t \t \t writer.write(String.format( "

%s

"、userinfo2)); \t \t writer.write(String.format( "

%s

"、name)); \t \t writer.close(); しかし、今私はあなたを試して、ありがとう;) – agapitocandemor

関連する問題