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