XPages寻呼机刷新问题

时间:2014-09-08 20:35:48

标签: xpages xpages-extlib

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

<?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>

1 个答案:

答案 0 :(得分:0)

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

您可以将pagesize控件的代码解压缩到Java dataObject / bean / util或dataContext / SSJS库吗?然后用一行SSJS或EL来引用它?

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

Tim Tripcony做了一个快速而肮脏的方式演示http://www.notesin9.com/2012/04/04/notesin9-064-global-custom-controls-fixed/