1

Web サービスから読み込まれたオブジェクトのリストを表示するページがあります。これは時間がかかる場合があります。今、私はそれをAjaxの方法で行い、最初にページを表示してからリストをロードしたいと思います。リストがロードされている間、アニメーションが表示されます。JSF/ICEFacesでそれを行う方法の例を教えてもらえますか? ありがとう。

4

4 に答える 4

0

SessionRendererを使用することをお勧めします。私のICEfacesブックの例(http://icecube-on-icefusion.googlecode.com/)を見て、progressDialogタグで例を検索してください。または、本の244ffページ。

于 2010-02-11T22:57:59.540 に答える
0

ajaxスタイルの読み込みについて同じ問題があるため、この質問に対する答えがあると思います..

多くのサイトとicefacesフォーラムに潜んでいた後、スレッドを使用せずにこのコードを持っています:

最初に jquery をダウンロードする必要があります。コードは次のようになります。

<script type="text/javascript" src="js/jquery-1.6.min.js"/>
        <script type="text/javascript">
            var j = jQuery.noConflict();

            j(document).ready(function(){
                j(".wrapper-popup-loading").hide();
            });

            function icesubmitlocal() {
                var windowWidth = document.documentElement.clientWidth;
                var windowHeight = document.documentElement.clientHeight;
                var popupHeight = j(".wrapper-popup-loading").height();
                var popupWidth = j(".wrapper-popup-loading").width();

                j(".wrapper-popup-loading").css({
                    "position": "absolute",
                    "top": windowHeight/2-popupHeight/2,
                    "left": windowWidth/2-popupWidth/2
                }).show();
                j(".wrapper-popup-white").show();
            }


            function icereceivelocal() {
                j(".wrapper-popup-loading").hide();
                j(".wrapper-popup-white").hide();
            }

            function init() {
                Ice.onSendReceive('document:body',icesubmitlocal,icereceivelocal);
            }
        </script>

        <body onload="init()" id="outputBody1" style="-rave-layout: grid">

基本的な考え方は単純です。すべての ajax 呼び出しでポップアップ div を表示するだけでよく、icefaces js から確認を受け取るたびに、ポップアップを非表示にするだけです。

ポップアップ パネルは次のようになります。

<div class="wrapper-popup-loading"><!-- start wrapper -->
                    <div class="wrapper-popup-white"><!-- start wrapper -->
                        <center>
                            <img src="images/aed-popup.png" alt="" style="margin-top: 5px;"/>
                            <br />
                            <img src="images/aed-garuda.gif" alt="" style="margin-top: 5px;"/>
                        </center>
                    </div>
                </div><!-- end footer -->

次に、ajaxリクエストがオンになるたびにポップアップが表示され、ajaxが停止するとポップアップが非表示になります..

この助けを願っています..ありがとう

于 2012-01-24T08:21:28.360 に答える
0

わかりました、自分で解決しました。

これが私がやっている方法です:

Managed Bean のコンストラクターで、新しいスレッドを作成して開始するメソッドを呼び出しています。このスレッドはオブジェクトをロードします。オブジェクトがそこにあるとすぐに、Bean の「読み込み中」フラグが false に設定され、

PersistentFacesState.getInstance().renderLater();   

と呼ばれます。'loading' は、最初は false に設定されています。

これは、非同期モードでオブジェクトをロードする方法です。

 private void asyncLoading() {
            final MyBackingBean bean = this;
            final String userName = CallerContextUtil.getCurrentUserCompany();
            new Thread() {
                @Override
                public void run() {
                    bean.setLoading(true); 
                    PersistentFacesState.getInstance().renderLater();       
                    load(userName );                
                    bean.setLoading(false);             
                    PersistentFacesState.getInstance().renderLater();                   
                }
            }.start();      
        }

ビューでは、読み込みフラグの状態でアニメーション化された読み込み画像を表示または非表示にしています。

それが最善の解決策なのか、それとも良い解決策なのかさえわかりません。コメントは大歓迎です。

于 2010-02-09T09:45:30.217 に答える
0

J2EE サーバーで新しいスレッドを作成しないことを強くお勧めします。スレッドを管理するのはサーバーの仕事です。

ページがロードされたときに、ajax を使用して icefaces フォームの送信を要求できます。これでうまくいくはずです。

于 2010-02-12T17:47:04.333 に答える