2011-08-14 18 views
0

すべてのページに承認フレームが表示されています。ユーザーがログインを選択してもそのページを表示したい(jstlタグを使用して、このフレームの代わりにユーザー情報とショッピングへのリンクカート)。どうすればそれを達成できますか?私はいくつかのアイディアを持っていますが、彼らはすべて私のコントローラーデザインを壊しています。私は特に元のページにリダイレクトされる、またはnullのページの文字列をチェックするために、この場合のページのために書かれたためにリダイレクトすると、コントローラから元のページをリロードすることを考えたJSPページを再ロードする

public class FrontController extends HttpServlet { 

private ActionContainer actionContainer = ActionContainer.getInstance(); 

public FrontController() { 
    super(); 
} 
/** 
* Processes requests for both HTTP <code>GET</code> and <code>POST</code> methods. 
* @param request servlet request 
* @param response servlet response 
* @throws ServletException if a servlet-specific error occurs 
* @throws IOException if an I/O error occurs 
*/ 
@SuppressWarnings("unchecked") 
protected void processRequest(HttpServletRequest request, HttpServletResponse response) 
     throws ServletException, IOException { 

    String page = null; 

    try { 
     Action action = actionContainer.getAction(request); 
     page = action.execute(request, response); 
     RequestDispatcher dispatcher = getServletContext().getRequestDispatcher(page); 
     dispatcher.forward(request, response); 

    } catch (ActionNotFoundException e) { 
     RequestDispatcher dispatcher = getServletContext().getRequestDispatcher(PageNames.ERR_PAGE); 
     request.setAttribute(AttributeNames.ERR_MESSAGE_ATTRIBUTE, "Unknown Action command: " + e.getMessage()); 
     dispatcher.forward(request, response); 
    } catch (Exception e) { 
     RequestDispatcher dispatcher = getServletContext().getRequestDispatcher(PageNames.ERR_PAGE); 
     request.setAttribute(AttributeNames.ERR_MESSAGE_ATTRIBUTE, "Exception:\n" + e.getMessage()); 
     dispatcher.forward(request, response); 
    } 
} 

@Override 
protected void doGet(HttpServletRequest request, HttpServletResponse response) 
     throws ServletException, IOException { 
    processRequest(request, response); 
} 

@Override 
protected void doPost(HttpServletRequest request, HttpServletResponse response) 
     throws ServletException, IOException { 
    processRequest(request, response); 
} 

/** 
* Returns a short description of the servlet. 
* @return a String containing servlet description 
*/ 
@Override 
public String getServletInfo() { 
    return "Front Controller"; 
} 

@Override 
public void init() throws ServletException { 
    super.init(); 
    Locale.setDefault(new Locale("ru","RU")); 
}  

}

が、私はこれを行う方法を明確に理解できません。

答えて

0

あなたの質問が十分ではありません。しかし、ユーザーがログインした後で、ページ(ログインボタン)上の特定のコンポーネントを他のもの(ユーザー名、ウェルカムメッセージ、およびショッピングカートの詳細)に置き換える方法をお尋ねしていると思います。

私が要件を理解していれば、ユーザーがログインした後に何をするかは、Cookie(またはlocalStorageの値)に設定されます。 Cookieは、HttpServletResponseのaddCookieメソッドを使用してSet-Cookie応答ヘッダーに追加されます。例:

コントローラでは、「ユーザー」の値が設定されているかどうかを確認し、適切な処置をとってください。 A tutorial on servlets with cookies

ページをリロードせずにフロントエンドコンポーネントを処理し、フォームの値を変更する必要がある場合は、javascriptを使用して古いDOM要素を見つけて削除することをお勧めします(ユーザー名、ウェルカムメッセージ、ショッピングカート、何でも)。

iFrameがログインを行っている場合、ログインに成功すると、Cookieから更新された値を読み取った後、更新を行うトップウィンドウ内の関数を呼び出します。

これをフロントエンド、つまりJavascriptで完全に処理したい場合は、代わりにcookieを使用して、localStorageを使用します。 Stackoverとインターネット上では、localStorageのことについて多くの助けがありますが、私はYUI Storage Liteライブラリを提案して、localStorageからのデータの格納と読み込みを非常に簡単にします。

よろしくお願いいたします。

0

現在のURLを認証フォームの非表示フィールドに含めます。認証を処理するアクションでは、ユーザーが認証されると、このURLにリダイレクトされます。

JSPで、ユーザーが認証され、認証フォームまたはショッピングカートが含まれているかどうかをテストします。このテストは、ユーザーが認証されるとブール値をHTTPセッションに入れるだけで実行できます。

関連する問題