2011-01-28 12 views
0

まず第一に、私は最後の質問のために私の言い訳をしたいです。システムがここでどのように動作するかを知りませんでした:-)JSF Ajax質問

私はJSFとAjaxのコスカリングに関する質問があります。 私のWebアプリケーションは動的です。ページ全体が最初に1回だけ読み込まれます。 ユーザーがメニューをナビゲートすると、中央テーブルだけが出力を変更します。

私は、primeface`s datatableのようないくつかのコンポーネントを持っているか、私のbeanで関数を実行する単純なボタンを持っています。私のWebアプリケーションはバックエンドサーバーに接続し、情報はJSFとバックエンドで共有され、ユーザーに表示されます。

"検索"ボタン機能では、結果は私のデータテーブルに表示されるはずです。メソッド{#searchBean.doSearch}が実行されます。ユーザーの情報とともにバックエンドにメッセージが送信されます。 JSFは数秒後にこれらの情報を受け取ります。 これは私のプリンシペです。

は、今私は、手動でデータテーブルのレンダリングと彼に伝えたい「すべての検索結果が受信された。その結果を更新してください」 はそれはJSFを経由して、手動でコンポーネントをレンダリングすることは可能ですか?または、別の解決策がありますか?

私の2番目の質問です。 メッセージがバックエンドに送信されると、結果を受け取るまでに数秒かかることがあります。 ユーザーに(ダイアログを使用して)「Waiting」メッセージを表示する最適な方法は何ですか? 私はバックエンドから結果を受け取ったときに、受信した情報が表示されるようにコンポーネントを手動で更新したいのですが、この「待機中」ダイアログを削除する方法が必要です。

私の英語は最高ではないので、私が欲しいものを理解してください: 私の問題を解決する方法はわかりません...私はJSF経由でHTML要素を更新する方法が必要だと思います。手動でコンポーネントをレンダリングします。しかし、私はインターネット上で何かを見つけませんでした。たぶん私は間違ったものを探しましたか?

よろしく、 ジョニー

答えて

0

あなたはこのため<f:ajax>を使用することができます。 render属性があり、再レンダリングするコンポーネントのクライアントID(相対または絶対)を指す必要があります。 :で始まるのは絶対的な意味(生成されたHTMLにあるように)を意味します。それ以外の場合は、現在のnaming container(例えば、<h:form>のようなもの)に相対的です。

ここでは簡単な基本的な例です:

このよう Bean
<h:form> 
    <h:inputText value="#{bean.query}" /> 
    <h:commandButton value="Search" action="#{bean.search}"> 
     <f:ajax execute="@form" render=":results" /> 
    </h:commandButton> 
</h:form> 

<h:panelGroup id="results"> 
    <h:dataTable value="#{bean.results}" var="result" rendered="#{not empty bean.results}"> 
     <h:column>#{result}</h:column> 
    </h:dataTable> 
</h:panelGroup> 

:あなたは、(心の中で前の2.0 JSFで構築された)Primefacesを

@ManagedBean 
@ViewScoped 
public class Bean implements Serializable { 

    private String query; 
    private List<Result> results; 

    public void search() { 
     results = resultDAO.list(query); 
    } 

    // ... 
} 
+0

ありがとう!私は今、それらの方法を試してみるつもりです。 – Johnny

1

使用しているのでBalusCで記述されたものよりも、Ajaxを扱うより具体的な方法を使用することができます。

ほとんどのコンポーネントには、「更新」という属性があります。この属性を使用して、何か起こった後にどのコンポーネントを更新するかをJSFに指示します。たとえば、次のようにマークされたボタンがあるとします。

Beanを実行した後、クライアントIDが「panelContainingDatatable」のコンポーネントが常にリフレッシュされます。search()メソッド。あなたはAJAX要求の保留、使用したpについてユーザーに通知したい場合は

はまた、:ajaxStatus(http://www.primefaces.org/showcase/ui/pprAjaxStatus.jsf

は注意してください、注意点があります

  • 我々はクライアントIDについて話していますここでは、コンポーネントidではありません(ページソースでベストルックアップ)

  • ajaxとui:repeatおよびh:dataTableを混在させるとエッジケースが発生します。率直に言って、あなたがそれらを解決するよりも、そのようなケースを避けることをお勧めします。これらは、実装上のバグや、ui:repeatに関する最適ではない設計上の決定に由来します。

+0

ありがとう!私は今、それらの方法を試してみるつもりです。 – Johnny

+0

ああ、私は彼がPrimeFacesを使っていたことを見落とした/忘れてしまった。実際、 ''は基本的に ' '。 – BalusC

関連する問題