Web サービスから読み込まれたオブジェクトのリストを表示するページがあります。これは時間がかかる場合があります。今、私はそれをAjaxの方法で行い、最初にページを表示してからリストをロードしたいと思います。リストがロードされている間、アニメーションが表示されます。JSF/ICEFacesでそれを行う方法の例を教えてもらえますか? ありがとう。
4 に答える
SessionRendererを使用することをお勧めします。私のICEfacesブックの例(http://icecube-on-icefusion.googlecode.com/)を見て、progressDialogタグで例を検索してください。または、本の244ffページ。
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が停止するとポップアップが非表示になります..
この助けを願っています..ありがとう
わかりました、自分で解決しました。
これが私がやっている方法です:
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();
}
ビューでは、読み込みフラグの状態でアニメーション化された読み込み画像を表示または非表示にしています。
それが最善の解決策なのか、それとも良い解決策なのかさえわかりません。コメントは大歓迎です。
J2EE サーバーで新しいスレッドを作成しないことを強くお勧めします。スレッドを管理するのはサーバーの仕事です。
ページがロードされたときに、ajax を使用して icefaces フォームの送信を要求できます。これでうまくいくはずです。