2011-10-18 9 views
1

私はSeam WeldMyFaces CODIに関する簡単なテストを行っています。私のプロジェクトにCODI jarファイルを追加した後、私は、BeanスコープがRequestScopedであっても、すべての要求にwindowId要求値を追加することを発見しました。 BeanがRequestScopedの間に、すべての要求にwindowIdリクエストパラメータを追加することは本当に必要ですか?この場合、現実的なシナリオはありますか?それが不要な場合は削除することは可能ですか?たとえば:MyFaces CODIとwindowIdリクエストパラメータの問題

これは、Beanクラスのコードです:

import javax.enterprise.context.RequestScoped; 
import javax.inject.Named; 

@Named("myBean") 
@RequestScoped 
public class MyBean{ 
private String firstName; 
private String lastName; 

public String getFirstName() { 
    return firstName; 
} 

public void setFirstName(String firstName) { 
    this.firstName = firstName; 
} 

public String getLastName() { 
    return lastName; 
} 

public void setLastName(String lastName) { 
    this.lastName = lastName; 
} 
} 

これは、ページの本文です:

<body> 
<h:form> 
<h:inputText value="#{myBean.firstName}"></h:inputText> 
<br/> 
<h:inputText value="#{myBean.lastName}"></h:inputText> 
<br/> 
<h:commandButton value="submit"></h:commandButton> 
</h:form> 
</body> 

答えて

3

のApache MyFacesをCODIは、ブラウザのタブ区切り豆をサポートするためにWINDOWIDを追加します。 @WindowScoped、@ViewAccessScoped、CODIs @ConversationScopedのようなCODIスコープを使用すると、各ブラウザタブごとに個別のコンテキストインスタンスが取得されます。

顧客関係管理アプリケーションがあるとします。 CODI @WindowScopedを使用すると、さまざまなブラウザタブ/ウィンドウで異なる顧客を開くことができます。 @SessionScopedを使用しますか?その場合は、毎回値を上書きします(@SessionScoped Beanの場合、セッションごとにコンテキストインスタンスが1つしかありません)。

もちろん、この機能をかなり簡単に無効にすることができます。それは公式のwikiで解決策を見つけるためにいくつかの時間がかかる https://cwiki.apache.org/confluence/display/EXTCDI/Index

+0

はあなたのプロンプトのためにありがとうございました回答;しかし、私はもう少し議論する必要があります。はい、ブラウザのタブと他のタブを区別するためにwindowIdが必要です。ただし、常にタブを区別する必要はありますか?私の平均はなぜ会話が関わっていない場合に必要なのでしょうか?私はこのようなテストを行いました:私は1つのJSFページしか持たず、h:フォームを含んでいます。現在のページを再表示するh:commandButtonも含まれています。私は1つのBeanしか持たず、RequestScopedです。このBeanはそのページのh:フォームで参照されます。ただし、依然としてCODIは要求にwindowIdを追加します。それは必要ですか? – carawan

+0

>私の意味は、会話が関わっていない場合になぜ必要なのでしょうか? ConversationScopedを使用するページから別のページ(ViewScoped)に移動し、元のConversationScopedに戻ったとします。中間のページにwindowIdをドロップすると、会話が失われてしまいます。 CODIの「会話」メカニズムは、Seam2とCDIとの会話と基本的に異なることに注意してください。 – struberg

+0

私たちが同じページにいるかどうかわかりません。私の質問は、私たちが持っているものすべてがプロジェクトの中のただ一つのBean(唯一)であり、それがRequestScopedなら、なぜwindowIdが必要なのかです。他の豆は一切持っていません。 – carawan

3

:私たちの公式WIKIを確認してください。 https://cwiki.apache.org/confluence/display/EXTCDI/Index

あなたは、あなたがあなたのプロジェクトでは、このようなクラスを作成することができ、@WindowScoped、@ViewAccessScopedし、このWINDOWIDパラメータを必要としないことを確認を使用しない場合:

@Specializes 
@ApplicationScoped 
public class CustomWindowContextConfig extends WindowContextConfig { 

    @Override 
    public boolean isAddWindowIdToActionUrlsEnabled() { 
     return false; 
    } 

    @Override 
    public boolean isUrlParameterSupported() { 
     return false; 
    } 
} 
関連する問題