0

Primefaces3.3.1でJSF2を使用しています。

template.xhtmlページでformタグを使用し、その中にすべてのページを含めました。したがって、すべてのページは同じフォームの下にあります。私のシナリオは次のとおりです。2つのパネルがあります。1つは顧客検索パネルで、もう1つは顧客検索結果パネルです。顧客検索パネルには、いくつかのテキストボックスと1つのコマンドボタンが含まれています。そのテキストボックスで、顧客に関するいくつかの入力を行い、コマンドボタンをクリックします。その後、検索結果を含む1つのデータテーブルを含む顧客検索結果パネルをロードする必要があります。

最初は、顧客検索パネルのみをロードします。コマンドボタンをクリックすると、顧客検索パネルが読み込まれます。顧客検索パネルのそのコマンドボタンで、更新属性に顧客検索結果パネルIDを指定しました。好き

<p:commandButton value="click" action="#{bean.action}" update="cust_search_panel"/>

コマンドボタンを押すと、jsfは「識別子cust_search_panelのコンポーネントが見つかりません」と表示します。IDが表示されないように、最初は顧客検索結果パネルをロードしないためです。

Primefaces 2.2.1を使用する場合、コンポーネントがフォームにない場合、「識別子cust_search_panelのコンポーネントが見つかりません」という情報メッセージが追加されるため、問題はありません。しかし、primefaces 3.3.1では、その情報メッセージをエラーメッセージに変更しました。そのため、このエラーが原因でページが読み込まれていません。

「識別子cust_search_panelのコンポーネントが見つかりません」のようなメッセージを受け取った場合、facescontextからそのエラーメッセージを削除できる場合は、ページが正しく読み込まれますか?

これ以外の解決策は見つかりませんでした。誰かがこの問題を解決するのを手伝ってくれませんか。

前もって感謝します。

4

3 に答える 3

0

存在しない要素を参照することは誤りであり、JSFはエラーを表示するはずです。JSFがページの読み込みを許可する場合、JavaScriptエラーが発生します。

これを処理する適切な方法は、親要素を参照することです。したがって、あなたの場合、パネルをレンダリングしてデータテーブルを非表示にする必要があります。コマンドボタンは、データテーブルを含むパネルを更新する必要があります。

例:

<p:commandButton value="click" action="#{bean.action}" update="cust_search_panel"/>

<your-container id="cust_search_panel">
    <p:dataTable rendered="#{bean.someCondition" .../>
</your-container>
于 2012-08-25T11:15:33.740 に答える
0

試してみましたか

<p:commandButton value="click" action="#{bean.action}" update=":cust_search_panel"/>

?

于 2012-08-24T12:43:40.937 に答える
0

私は他の簡単な解決策を知りません。しかし、これはうまくいくはずです:

アクション メソッドからコンポーネントを更新し、ボタンの update 属性を削除します。

if (context.getViewRoot().findComponent("myForm:cust_search_panel") != null){
     RequestContext.getCurrentInstance().update("cust_search_panel");
}
于 2012-08-24T12:41:27.047 に答える