【问题标题】:Is there anyway to add a loading message to rich:dataTable?无论如何要向rich:dataTable添加加载消息吗?
【发布时间】:2011-11-28 18:40:56
【问题描述】:

有没有人找到一种在rich:dataTable 加载时显示加载消息的方法?

我发现,如果支持 DataModel 的加载操作花费时间,则会导致请求花费时间。在此负载期间向用户显示消息的有效方法是什么?

我正在使用 Richfaces 3.3.3。

【问题讨论】:

    标签: jsf richfaces loading messages richdatatable


    【解决方案1】:

    您可以使用a4j:status。更多详情请参考Exadel liveemo:http://livedemo.exadel.com/richfaces-demo/richfaces/status.jsf?c=status&tab=usage

    如果您只需要显示数据表交互的消息,您可以通过a4j:region 限制a4j:status 的区域:

    <a4j:region>
        <a4j:status startText="Loading. Please wait..." >
    
        <rich:dataTable .../>
    </a4j:region>
    

    更新: 对于某些内容的延迟加载,可以使用以下方法。 创建一个 facelet(或组件):

    <ui:composition xmlns="http://www.w3.org/1999/xhtml"
                xmlns:ui="http://java.sun.com/jsf/facelets"
                xmlns:h="http://java.sun.com/jsf/html"
                xmlns:f="http://java.sun.com/jsf/core"
                xmlns:c="http://java.sun.com/jstl/core"
                xmlns:a4j="http://richfaces.org/a4j"
                xmlns:rich="http://richfaces.org/rich">
    <h:panelGroup id="lazyP#{id}" layout="block">
        <ui:fragment rendered="#{lazy.isRendered(id)}">
            <ui:insert name="lazy"/>
        </ui:fragment>
        <ui:fragment rendered="#{not lazy.isRendered(id)}">
    
            <h:outputText value="Loading..."/>
    
            <a4j:region>
                <a4j:jsFunction name="loadData#{id}" reRender="lazyP#{id}"
                                action="#{lazy.release(id)}"
                                limitToList="true"
                                ajaxSingle="true" eventsQueue="lazyQueue"/>
            </a4j:region>
            <script type="text/javascript">
                jQuery(document).ready(function() {
                    loadData#{id}();
                });
            </script>
        </ui:fragment>
    </h:panelGroup>
    

    lazy 是 bean 的引用(我使用页面范围),它存储了已渲染和未渲染的映射(release 方法将项目标记为已渲染)。

    然后你可以像下面这样使用它:

    <ui:decorate template="lazyLoad.xhtml">
         <ui:param name="id" value="someId"/>
         <ui:define name="lazy">
               <rich:dataTable ... />
         </ui:define>
    </ui:decorate>
    

    【讨论】:

    • 这对于表内的内部更改、datascroller 以及基本上可以放入 a4j:region 的页面上的任何内容非常有用,但对于来自模式或其他需要更新表的页面的请求做一个单独的状态。
    • @James McMahon 你能描述问题中的一个用例吗?据我了解,即使是 GET 请求,您也需要加载消息(首页布局显示为 Loading.. 消息,然后是表格内容(向服务器发送单独的“惰性”AJAX 请求?))。
    • @James McMahon 第一种方法显然与延迟加载无关。我已经用延迟加载解决方案更新了我的答案。该解决方案使用了一些 JBoss Seam 特性(页面范围和在 EL 中使用参数调用方法),我相信您将设法仅使用 JSF 1.2 来做同样的事情(例如,用于 EL 的函数,以及会话范围或请求范围+隐藏字段而不是页面范围)。
    • 感谢您的详细解答。我得试试这个。
    猜你喜欢
    • 2015-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-08
    • 2020-02-27
    • 2017-07-30
    • 1970-01-01
    • 2018-08-29
    相关资源
    最近更新 更多