2016-08-24 10 views
-1

ユーザーがポートレットの「閉じる」リンクをクリックすると、彼をログアウトしてホームページにリダイレクトする必要があります。それは簡単ではありませんが、ここでは難解です。ポートレットAPI、Struts 2、jQueryを使用してページを構成しています。私のポートレットから私のページをウェブサイトのルートにリダイレクトする方法はありますか?

私のポートレットのコンテキストからは、単にWebサイトのルートを参照できません。

クローズ(アクションを使用)をクリックするとセッションを無効にできました。ページ全体(別のポートレットで構成)をホームページにリダイレクトするにはどうすればよいですか?

+0

struts2でフィルタリングされたWebアプリケーション全体を使用すると、ポータルとポートレットとの違い。 –

答えて

1

ポートレットを開発するときは、具体的にはAPI経由でフルページリダイレクトを行うことはできません。これがポートレットAPIのポイントです。ポートレット開発者は、ページを共有する相手がわからず、あなたはHttpRequestから十分に遮蔽されています。

ポータルですでに応答が返ってきている可能性があります。そのため、リダイレクト応答コードを送信するには遅すぎます。ポートレットのHTMLフラグメントを提供するためにAjaxを利用することにしました。これはまた、期待される挙動をもたらさない可能性がある。

このリダイレクトで表示される1つの(非協力的な)方法は、レンダリング中にページをリダイレクトするJavascriptコードを生成することです。なぜ非協力的なのでしょうか?まあ、すべての単一のポートレットでこのようなコードが生成される可能性がありますが、当然最初のポートレットだけが勝ちます。どちらが最初ですか?未定義。ページ全体が1つのドキュメントにレンダリングされる場合は、そのページの最初のページになることがあります。ポートレットがAjaxを介して個別に配信される場合:誰が知っていますか。

しかし、誰かをログアウトすると(非標準的なやり方で動作することは保証されていない可能性があります)、自分のページを非公開にすることができます。ログインが必要です。 Liferayは自動的にあなたをログインページにリダイレクトします。

0

Struts2を使用している場合、ログインしたユーザーが各アクションの前にチェックし、ログインしたユーザーがいなければグローバル結果にリダイレクトするインターセプターを追加できます。

public class LoginInterceptor extends AbstractInterceptor { 

    @Override 
    public String intercept(ActionInvocation invocation) throws Exception { 
     if (invocation.getInvocationContext().getSession().get(Const.USER) != null) { 
      return invocation.invoke(); 
     } 
     else { 
      return "globalLogin"; 
     } 
    } 

} 

次に、あなたのメインのアクション(ホーム・ページが表示されます1)

にリダイレクトあなたのstruts.xmlでこれを入れstruts.xml

<interceptors> 
    <interceptor name="loginInterceptor" class="business.interceptor.LoginInterceptor"/> 
     <interceptor-stack name="loginStack"> 
      <interceptor-ref name="loginInterceptor"/> 
      <interceptor-ref name="defaultStack" /> 
     </interceptor-stack> 
    </interceptors> 

にインターセプタスタックにインターセプターを追加

<global-results> 
    <result name="globalLogin" type="redirectAction"> 
     <param name="actionName">main</param> 
    </result> 
</global-results> 
+0

これは、ページがポートレットの構成なので除いて、私は本当にリダイレクトする主なアクションはありません...私は直接URLにリダイレクトしようとしましたが、type = "redirect"と場所として完全なURLが、それは動作しませんでした。 – Tarek

関連する問題