在页面渲染后触发服务器请求(ajax?)以在apache wickets中重新呈现页面的某些部分

时间:2013-01-28 11:18:03

标签: ajax wicket wicket-1.5

在我的页面上有一个显示汽车经销商列表的面板。该面板显示经销商列表,其中包含每个经销商的信息,如下所述。

  • 我需要展示的每个经销商:姓名,地址,电话,营业时间。数据在json。
  • 姓名,地址,电话:它们是简单的文字标签。
  • 小时:每个deaaler都有一个“查看小时”链接。单击它时,如果小时数据尚未显示,则文本标签会向下滑动显示“loading-gif”的链接,否则显示小时数据。再次单击链接会隐藏小时数据。

呈现页面时,这是我需要的行为:

  • 在页面渲染中,我会显示名称,地址,手机标签& 小时链接。截至目前,我 NOT 在json中有小时信息。
  • 在页面渲染之后,我想向服务器发出请求(Ajax?),获取更新的json,包含小时信息&重新渲染“查看时间”,以便在点击时显示小时数。 这是我不知道该怎么做。

为什么我最初不发送带有小时信息的json?这是因为收集费用昂贵而且“观看时间”链接很少使用。因此,预先收集所有数据将使页面呈现缓慢。我希望页面加载的事件/行为触发请求获取小时数据&重新呈现小时文本标签,点击“查看时间”链接向下滑动。

我查看了AjaxSelfUpdatingTimerBehavior,但其触发器是持续时间,而不是页面加载。

3 个答案:

答案 0 :(得分:0)

由于view hours链接将被“非常罕见”使用,根据您的说法,最好是按需获取这些数据,而不是在页面加载期间/之后将它们全部拉出来。

这反过来会减少在页面中收集大量数据的开销,并且还可以让您将每个数据与每个记录相关联,解析它们并将它们放入HTML中。

答案 1 :(得分:0)

尝试添加“查看时间”链接和代码以获取Panel上的数据,然后使用AjaxLazyLoadPanel http://www.mkyong.com/wicket/how-do-use-ajaxlazyloadpanel-in-wicket/延迟加载该面板。当应用程序收集数据时,您可以为每个链接显示loading-gif。

答案 2 :(得分:0)

您可以使用AjaxLazyLoadPanel(如drobson建议的那样)。这非常好用但在你的场景中它可能有一个缺点。每个要更新的小时都是同步的AJAX调用,因此每个小时都需要单独更新。这可能意味着更多的流量和不理想的用户体验。

另一种选择可能是在您的页面中添加AbstractDefaultAjaxBehavior,这将更新小时数(并将整个面板添加到目标)。您可以在文档加载时调用此行为生成的方法。

    this.add(new AbstractDefaultAjaxBehavior() {

        @Override
        protected void respond(AjaxRequestTarget target) {
            //calculate hours + add list or whatever to the target
        }

        @Override
        protected CharSequence getCallbackScript() {
            StringBuilder result = new StringBuilder();

            result.append("function resetHours() {\n");
            result.append("wicketAjaxPost('" + this.getCallbackUrl() + "', null, function(){}, function(){});" + "\n");
            result.append("}\n");
            return result;
        }
    });

电话:

public void renderHead(IHeaderResponse response) {
    response.renderOnLoadJavaScript("resetHours()");
}