【发布时间】: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