【问题标题】:XPages pager refresh issueXPages 寻呼机刷新问题
【发布时间】:2014-09-10 06:12:40
【问题描述】:

我遇到了寻呼机执行部分刷新的问题(因为我们有服务器端重定向规则,所以这里不能选择完全刷新)。如果我将寻呼机放在同一页面而不是自定义控件中,那么它会刷新主面板。但是如果我将寻呼机放在自定义控件中,那么它只会更新重复控件,这意味着寻呼机控件本身不会被刷新。这是一个演示问题的简单示例。

<?xml version="1.0" encoding="UTF-8"?>
<xp:view xmlns:xp="http://www.ibm.com/xsp/core" xmlns:xc="http://www.ibm.com/xsp/custom">
    <xp:panel id="mainPanel">
        <xc:ccPager pagerFor="repeat1" id="myPager" />
        <xp:repeat id="repeat1" rows="3" var="row">
            <xp:this.value><![CDATA[#{javascript:var cars = ["Saab", "Volvo", "BMW", "Saab", "Volvo", "BMW"];
return cars; }]]></xp:this.value>
            <xp:text escape="true" id="computedField1" value="#{row}">
            </xp:text>
        </xp:repeat>
    </xp:panel>
</xp:view>

这是自定义控件的代码:

<?xml version="1.0" encoding="UTF-8"?>
<xp:view xmlns:xp="http://www.ibm.com/xsp/core">
    <xp:pager layout="Previous Group Next" partialRefresh="true"
        id="pager1" for="#{compositeData.pagerFor}" partialExecute="false">
    </xp:pager>
</xp:view>

欢迎任何提示。在这种情况下,分页器很简单,但我有一个更复杂的分页器和一个包含 45 行源代码的页面大小控件,因此如果可能的话,我更愿意创建一个可重用的自定义组件。

更新

我当前的寻呼机自定义控件:

<div id="page-result" class="pagination pagination-small clearfix">
    <div class="col-lg-12 pagination clearfix">
        <div class="results form-inline left">
            <fieldset>
                <xp:pager id="pager1" alwaysCalculateLast="true"
                    for="#{compositeData.strPagerFor}" styleClass="pag-control"
                    partialRefresh="true" partialExecute="false">
                    <xp:pagerControl id="pagerControl1" type="FirstImage"
                        styleClass="firstPage" image="/PagerArrowhead2-L_d.png">
                    </xp:pagerControl>
                    <xp:pagerControl id="pagerControl2" type="PreviousImage"
                        styleClass="previousPage" image="/PagerArrowhead-L_d.png">
                    </xp:pagerControl>
                    <xp:pagerControl id="pagerControl5" type="Group"
                        currentStyleClass="active" styleClass="pages">
                    </xp:pagerControl>
                    <xp:pagerControl id="pagerControl3" type="NextImage"
                        styleClass="nextPage" image="/PagerArrowhead.png">
                    </xp:pagerControl>
                    <xp:pagerControl id="pagerControl4" type="LastImage"
                        styleClass="lastPage" image="/PagerArrowhead2.png">
                    </xp:pagerControl>
                </xp:pager>
                <label>
                    <xp:text escape="true" id="computedField1" value="#{compositeData.strLabelText}" />
                </label>
            </fieldset>
        </div>
        <div class="results form-inline">
            <fieldset>
                <label> Results per page: </label>
                <xe:pagerSizes id="pagerSizes1" for="#{compositeData.strPagerFor}"
                    sizes="7|15|25|50|all" text="{0}" styleClass="resultPage"
                    partialRefresh="true" partialExecute="false"
                    refreshId="#{compositeData.strRefreshPanel}" />
            </fieldset>
        </div>
    </div>
</div>

【问题讨论】:

  • 您在哪里指定要更新的面板?
  • 您是否考虑过将自定义控件放入重复控件的标题方面?它以这种方式工作。
  • 感谢 Serdar,为了将其放置在重复控件的页眉和页脚部分,我们需要进行重大的设计更改,但这是一个解决方案,我会试一试。
  • Steve,这是分页控件的问题,您不能指定要更新的面板!但正如我在示例中所描述的,如果您将寻呼机放在 xpage 上,它将更新整个页面。
  • 另一种解决方案是实现一个继承重复控件(或其渲染器)的新组件。只是为了获取分页事件并进行自我刷新。也许,即使是自定义渲染器就足够了。不过,如果没有真正看到代码本身,可能会更困难。

标签: xpages xpages-extlib


【解决方案1】:

我以前遇到过这个问题。我认为这是因为视图容器在单独的自定义控件中时找不到寻呼机。我认为它使用的是 getComponent 之类的东西,它无法向下导航到自定义控件,因此无法找到寻呼机来更新它。

您能否将页面大小控件的代码提取到 Java dataObject / bean / util 或 dataContext / SSJS 库中?然后用一行SSJS或者EL引用?

另一种选择是使用插件并构建一个扩展重复控件并将寻呼机添加到相关标题的组件?

Tim Tripcony 提供了一个很棒的演示,展示了一种快速而肮脏的做法http://www.notesin9.com/2012/04/04/notesin9-064-global-custom-controls-fixed/

【讨论】:

  • 感谢 Paul 提出一些有趣的想法,所以这不是一个快速解决方案。
猜你喜欢
  • 2011-05-07
  • 1970-01-01
  • 1970-01-01
  • 2011-06-13
  • 2015-04-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-06
相关资源
最近更新 更多