Загрузка в стиле Ajax с IceFaces - PullRequest
       12

Загрузка в стиле Ajax с IceFaces

1 голос
/ 09 февраля 2010

У меня есть страница, на которой я показываю список объектов, которые загружаются из веб-сервиса.Это может занять некоторое время.Теперь я хотел бы сделать это Ajax-способом и сначала показать страницу, а затем загрузить список.Во время загрузки списка должен отображаться анимированный.Кто-нибудь может привести пример, как это сделать с помощью JSF / ICEFaces?Благодаря.

Ответы [ 4 ]

0 голосов
/ 24 января 2012

я думаю, что у меня есть ответ на этот вопрос, потому что у меня такая же проблема с загрузкой в ​​стиле 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 останавливается, всплывающее окно скрывается.

надеюсь, что это поможет .. спасибо

0 голосов
/ 12 февраля 2010

Было бы лучше использовать SessionRenderer. Взгляните на примеры из моей книги ICEfaces (http://icecube -on-icefusion.googlecode.com / ) и найдите в качестве примера тэг progressDialog. Или стр. 244 и далее в книге.

0 голосов
/ 12 февраля 2010

Настоятельно не рекомендуется создавать новые потоки на сервере J2EE. Работа сервера заключается в управлении потоками.

Вы можете запросить отправку формы icefaces, используя ajax, когда ваша страница загружена, что должно помочь.

0 голосов
/ 09 февраля 2010

Ок, решил сам.

Вот как я это делаю:

в конструкторе управляемого объекта я вызываю метод, который создает и запускает новый поток. Этот поток загружает объекты. Как только объекты есть, флаг загрузки моего бина устанавливается в 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();      
        }

В представлении, которое я показываю или скрываю при загрузке анимированных изображений, отображается состояние флага загрузки.

Я не знаю, является ли это лучшим или даже хорошим решением. Комментарии приветствуются.

...