2012-01-13 18 views
2

Imは#{bean.validationGroup}は常にはJSF 2.1 validateBeanは常にpreRenderViewイベント

<f:event type="preRenderView" listener="#{bean.initView}" /> 

前に呼び出されますが、ダイナミックvalidationGroups

<h:inputText id="id" value="#{bean.char}" maxlength="8" alt="#{bean.displayName}"> 
     <f:validateBean 
       validationGroups="#{bean.validationGroup}" /> 
</h:inputText> 

を使用しようとする前に呼び出さこれはMyFacesののバグです? preRenderはdbからデータをロードし、validationGroupsは異なるため、#{bean.validationGroup}をprerenderviewの後に呼び出す必要があります。豊かな環境でMyfaces 2.1.5を使用しています。

答えて

1

これは実際に指定された動作です。ビューの作成時に<f:xxx>タグが実行されます。ビューを作成する前にプロパティを初期化したい場合は、Beanの(ポスト)コンストラクタメソッドでジョブを実行する必要があります。プリレンダリングビューイベントは、ビューがレンダリングされる直前に実行されますが、ビューが作成されるとすぐに実行されます。

<f:event>を完全に削除し、代わりにinitView@PostConstructメソッドを作成してください。

@PostConstruct 
public void initView() { 
    // ... 
} 

それはそうで@ManagedProperty@Inject@EJBなど、すべての依存性の注入のBeanの建設や仕上げの直後に実行されます。

+0

ありがとう。これはPostConstruct対preRenderViewに関する質問に私を戻します。 PostConstuctが呼び出される前に設定されていないf:viewParamがあります。だから私は質問をスキャンし、解決策はpreRenderViewを使用することです。今では円に入っています – user1147953

+0

' '。 – BalusC

0
@ManagedBean 
@XScoped --sessionScope,viewScope 
Public class Bean{ 
public void initView(){ 
    if (!FacesContext.getCurrentInstance().isPostback(){ 
    //put initView codes here 
    } 
    } 

} 
+0

これは具体的な問題をどのくらい正確に解決しますか?それとも、具体的な問題を全く理解していないのですか? – BalusC

関連する問題