2011-12-14 14 views
2

私のタイムゾーンの午後は良いです。アクションからアクションへの転送

私はstrutsフレームワークを使用してWebアプリケーションを開発しています。簡単な方法で は、ユーザがコールされた最初のアクションがSecurityActionあるアプリケーションを呼び出すときに、このアクションは、2つのアクションのいずれかにリダイレクトする、これは私がリダイレクトを行う方法です:

 if (user == "type_profile") 
      forward = mapping.forward("action2Fwd"); 
    else 
      forward = mapping.forward("action3Fwd"); 
    return forward; 

struts-config.xml私は

<global-forwards> 
    <forward name="action2Fwd" path="/action2.do"/> 
    <forward name="action3Fwd" path="/action3.do"/> 
</global-forwards> 
<action path="/action2" 
      type="com.teste.dummy.action2" 
      name="actionForm" 
      validate="true" 
      input="/action2.jsp"> 
</action> 

私は最初の質問:アクションから別のアクションにリダイレクトするための最良の方法ですか?

2番目の質問:別のアクションにリダイレクトすると、actionFormが実行されます。このリクエストは別のアクションから来たものですか?

フォームの中にリクエストが別のアクションから来た場合、私は何かを検証したくないので、このリクエストは別のアクションから来て、 "ブラウザ"から来ないことを知っていなければなりません。このリクエストが別のアクションに由来することを示す要求またはセッションスコープのフラグですが、これが最善の方法ですか?

答えて

1

最も簡単な方法からフォームが取得される場所に基づいて検証を有効または無効にする必要がある場合は、フォームにフラグを設定します。

このフラグは、アプリケーション全体の動作を提供するためにカスタム要求プロセッサーで処理できます。それほどエレガントではなく、アクションベースクラスは手動でバリデーションを呼び出すことも、存在を基準にしないこともできます。

フォワードの定義とそれを返す以外のアクションを転送する他の素晴らしい方法はありません。グローバルかどうかはセカンダリで、アプリケーションのニーズによって異なります。

+1

しかし、この要求をリダイレクト誰見つける方法はありますか? 何かのように - > mapping.getWhoRedirect() – tt0686

+0

@ tt0686その情報をフォーム(またはリクエストなど)に入れます。同じフラグを使用して、それが別のアクションから来たものであるかどうか、およびそれがどのアクションから来たものかを識別することができます。私はこれが優れたアーキテクチャであるとは確信していませんが、そのメカニズムは健全です。あなたは参照元を使って試してみることができますが、mehです。 –

0

私は自分のプロジェクトの1つでそれをしなければなりませんでした。これが私の問題を解決する方法です。それがあなたのために働くことを願っています。

JavaScriptを使用してこのアクションSelectCopyFromProjectAction.doを私のjspから呼び出しました。このアクションは別のクラスを呼び出し、より多くの作業を行いました。

function selectThisCopyProject(){ 
    document[0].action = "SelectCopyFromProjectAction.do"; 
    submitForm2(); 
}  

struts.config

<action path="/SelectCopyFromProjectAction" type="*****.SelectCopyFromProjectAction" scope="request"> 
    <forward name="success" path="LoadProjectionCopyLOBAction.do?actionType=loadProjects" /> 
    <forward name="failure" path="/WEB-INF/jsp/project_list.jsp"/> 
</action> 

二級 フォワード支柱に見られるように、新しいアクションJSPから

。前方には「成功」である場合に設定 <forward name="success" path="LoadProjectionCopyLOBAction.do" />

それはconfigに、このアクションにつながる:

<action path="/LoadProjectionCopyLOBAction" type="*******.LoadProjectionCopyLOBAction" name="ProjectCopyFormBean" validate="false" scope="request" > 
    <forward name="" .... /> 
</action> 
関連する問題