0

私はSpring JSF統合を使用してプロジェクトを行っています特定の属性を持つ@RequestScope Beanを持っています。これはフォーム(検索アプリケーション)で送信された後、同じBeanのリスト属性がdb値から取り込まれ、データテーブルを使用して同じページに表示されます(送信時にajaxが適用されます/検索ボタン)。最初に検索したときは問題なく結果が得られますが、問題は、別のブラウザーページでページを更新または開くと、データテーブルがまだ最初のリクエストのデータであり、他のページからナビゲートしても同じページに戻ると、最初のリクエストページ/データが次のように表示されることですセッションスコープの代わりにリクエストスコープが機能していない場合。私はBeanとその作成を管理するためにSpringを使用し、フロントエンドページにはjsfを使用しています。これは、顔とスプリング注釈の混合に問題がある可能性があります。そうであれば、ここでの解決策は何ですか??他の Bean の自動配線を通じて DAO メソッドも使用しているためです。例えば

@ManagedBean(name="inputService")
@RequestScoped
public class InputService {

 @Autowired
 AdvancSearchDaoImpl Dao;

 private String name;
 private String bloodgroup;
 private String dateofbirth;
 List<Result> searchResults;
 getter/setters of above attributes

   public String outputService()
    {
     searchResults=Dao.getAdvacnceServiceSearch(name,bloodgroup,dateofbirth);
    return "successful";
     }
   }

xhtml は次のとおりです。

  <div >
        <h:dataTable id="tbl" value="#{inputService.searchResults}" var="o" styleClass="display">
    <h:column>
    #{o.name}
    </h:column>
            <h:column>
    #{o.dateofbirth}
    </h:column>
           <h:column>
    #{o.bloodgroup}
       </h:column>
      </h:dataTable>

   </div>
  <h:form>
   <table>
   <tr><td>Full Name</td>
    <td>
    <h:inputText value="#{inputService.name}" styleClass="text-box" />
         </td></tr>

       <tr><td>Date of Birth</td>
          <td>
           <h:inputText  value="#{inputService.dateofbirth}" />
          </td></tr>

         <tr><td>Blood group</td>
         <td>
         <h:inputText  value="#{inputService.bloodgroup}" />
         </td></tr>

           <tr><td colspan="2" align="right">
                        <h:commandButton id="btnServiceSearch" value="Search" action="#{inputService.outputService}" styleClass="submitButton" >
                       <f:ajax execute="@form" render="tbl"></f:ajax>
                        </h:commandButton> </td> </tr>
 </h:form>

すべての Bean はアプリケーション コンテキストで定義されます。

4

1 に答える 1

1

私があなたのコードに目を向けたとき、私は行を見つけました

 @Autowired
 AdvancSearchDaoImpl Dao;

これは、JSF+Springを使用してアプリケーションを構築していることを意味します。ここで、2つのフレームワークを使用している場合は、両方のフレームワークのスコープを処理する必要があることを理解する必要があります(Spring + JSFについては確かです)。これで、あなたの場合、BeanがSpringによってもキャプチャされます。Springはデフォルトでシングルトンスコープであるため、コンテナ内に引き続き存在します。次に、Springコンテキストでもスコープを設定する必要があります。これは、Beanにアノテーションを付けることで実行できます。

@RequestScoped

または、Springコンテキストでエントリを作成し、そこにスコープを設定します。ここでは、スプリングスコープの設定に関する簡単なチュートリアルを見つけることができます

于 2013-02-25T07:45:22.817 に答える