2012-02-23 3 views
1

Я пытаюсь создать перейти к странице счетчика в сочетании с пейджером, и я нашел интересную статью:Пользовательские пейджера в XPages

http://www.mydominolab.com/2010/10/repeat-control-better-navigation.html

У меня он работает, но не хотел бы, чтобы изменить страницу нет , в поле со списком, если на странице нет. нажимается на пейджере (пейджер делает частичное обновление в данный момент). Я думал о свойстве defaultValue сначала в поле со списком, но это не сработало. Любые идеи, пожалуйста?

Вот несколько примеров кода:

<xp:panel styleClass="bodyText" id="dataPanel"> 
    <xp:panel style="font-size: 11px !important;"> 
     <xp:panel id="pagerArea" xp:key="headerPager"> 
      <div style="float:left"> 
       Page:&#160; 
       <xp:comboBox id="cmbPages"> 
        <xp:selectItems> 
         <xp:this.value><![CDATA[#{javascript:var rptControl:com.ibm.xsp.component.xp.XspDataIterator = getComponent("rptProduct"); 
if (rptControl == null) return []; 

var total = vwProduct.getAllEntries().getCount(); //rptControl.getRowCount(); 
var rowsperpage = rptControl.getRows(); 
var totalpages = Math.ceil(total/rowsperpage); 

var arr=[]; 
for (var i=1;i<=totalpages;i++) { 
arr.push(@Text(i)) 
} 
return arr}]]></xp:this.value> 
        </xp:selectItems> 
        <xp:eventHandler 
         event="onchange" submit="true" refreshMode="partial" 
         refreshId="dataPanel"> 
         <xp:this.action><![CDATA[#{javascript:var pager:com.ibm.xsp.component.xp.XspPager = getComponent("pager1_Hidden"); 
pager.gotoPage(parseFloat(getComponent("cmbPages").getValue()) - 1);}]]></xp:this.action> 
        </xp:eventHandler> 
       </xp:comboBox> 
      </div> 
      <xp:pager partialRefresh="true" id="pager1" 
       for="rptProduct"> 
       <xp:pagerControl id="pagerControl1" 
        type="FirstImage"> 
       </xp:pagerControl> 
       <xp:pagerControl id="pagerControl8" 
        type="Separator"> 
       </xp:pagerControl> 
       <xp:pagerControl id="pagerControl2" 
        type="PreviousImage"> 
       </xp:pagerControl> 
       <xp:pagerControl id="pagerControl6" 
        type="Separator"> 
       </xp:pagerControl> 
       <xp:pagerControl id="pagerControl5" 
        type="Group"> 
       </xp:pagerControl> 
       <xp:pagerControl id="pagerControl7" 
        type="Separator"> 
       </xp:pagerControl> 
       <xp:pagerControl id="pagerControl3" 
        type="NextImage"> 
       </xp:pagerControl> 
       <xp:pagerControl id="pagerControl9" 
        type="Separator"> 
       </xp:pagerControl> 
       <xp:pagerControl id="pagerControl4" 
        type="LastImage"> 
       </xp:pagerControl> 
      </xp:pager> 
     </xp:panel> 
     <xp:pager partialRefresh="true" 
      id="pager1_Hidden" for="rptProduct" layout="Previous Group Next" 
      style="display:none;" pageCount="1000"> 
     </xp:pager> 
    </xp:panel> 
    <div style="clear:both;"></div> 
    <br /> 
    <xp:repeat id="rptProduct" rows="16" value="#{vwProduct}" 
     var="productRow"> 
     <xp:panel styleClass="linkPanel" id="panel1"> 
      <xp:text escape="false" id="imgHTML"> 
       <xp:this.value><![CDATA[#{javascript:getImgURLForProduct(productRow.getDocument());}]]></xp:this.value> 
      </xp:text> 
      <xp:eventHandler event="onClientLoad" 
       submit="true" refreshMode="norefresh"></xp:eventHandler></xp:panel> 
    </xp:repeat> 
    <xp:eventHandler event="onClientLoad" submit="true" refreshMode="norefresh"></xp:eventHandler> 
</xp:panel> 

Кредиты: Благодаря Брюсу Лилле для скрытой пейджера идеи.

ответ

1

Немногие люди отправили мне по электронной почте один и тот же вопрос. С тех пор я обновил свою статью. Вы уже пробовали это.

http://www.mydominolab.com/2010/10/repeat-control-better-pagination.html

В принципе, вы положили кусок кода в случае beforeRenderResponse, как описано здесь. Дайте мне знать, если это не решило проблему. Я работаю в своей базе данных.

+0

Спасибо Rajeev, я дам этот ход - будет ли это работать и с частичным обновлением? – pipalia

+1

Абсолютно. Как вы уже знаете, beforeRenderResponse запускает частичное обновление. – Reevs

1

У меня следующий код работает. Он меняет страницы с помощью combobox, в IE9 и Firefox.

<xp:view xmlns:xp="http://www.ibm.com/xsp/core"> 

    <xp:this.data> 
     <xp:dominoView var="vwProduct" viewName="testview"></xp:dominoView> 
    </xp:this.data> 


    <xp:panel styleClass="bodyText" id="dataPanel"> 
     <xp:panel style="font-size: 11px !important;"> 
      <xp:panel id="pagerArea" xp:key="headerPager"> 
       <div style="float:left"> 
        Page:&#160; 
        <xp:comboBox id="cmbPages"> 
         <xp:selectItems> 
          <xp:this.value><![CDATA[#{javascript:var rptControl:com.ibm.xsp.component.xp.XspDataIterator = getComponent("rptProduct"); 
if (rptControl == null) return []; 

var total = vwProduct.getAllEntries().getCount(); 
var rowsperpage = rptControl.getRows(); 
var totalpages = Math.ceil(total/rowsperpage); 

var arr=[]; 
for (var i=1;i<=totalpages;i++) { 
arr.push(@Text(i)) 
} 
return arr}]]></xp:this.value> 
         </xp:selectItems> 
         <xp:eventHandler event="onchange" submit="true" 
          refreshMode="partial" refreshId="dataPanel"> 
          <xp:this.action><![CDATA[#{javascript:var pager:com.ibm.xsp.component.xp.XspPager = getComponent("pager1_Hidden"); 
pager.gotoPage(parseFloat(getComponent("cmbPages").getValue()) - 1);}]]></xp:this.action> 
         </xp:eventHandler> 
        </xp:comboBox> 
       </div> 
       <xp:pager partialRefresh="true" id="pager1" 
        for="rptProduct"> 
        <xp:pagerControl id="pagerControl1" 
         type="FirstImage"> 
        </xp:pagerControl> 
        <xp:pagerControl id="pagerControl8" 
         type="Separator"> 
        </xp:pagerControl> 
        <xp:pagerControl id="pagerControl2" 
         type="PreviousImage"> 
        </xp:pagerControl> 
        <xp:pagerControl id="pagerControl6" 
         type="Separator"> 
        </xp:pagerControl> 
        <xp:pagerControl id="pagerControl5" type="Group"> 
        </xp:pagerControl> 
        <xp:pagerControl id="pagerControl7" 
         type="Separator"> 
        </xp:pagerControl> 
        <xp:pagerControl id="pagerControl3" 
         type="NextImage"> 
        </xp:pagerControl> 
        <xp:pagerControl id="pagerControl9" 
         type="Separator"> 
        </xp:pagerControl> 
        <xp:pagerControl id="pagerControl4" 
         type="LastImage"> 
        </xp:pagerControl> 
       </xp:pager> 
      </xp:panel> 
      <xp:pager partialRefresh="true" id="pager1_Hidden" 
       for="rptProduct" layout="Previous Group Next" style="display:none;" 
       pageCount="10"> 
      </xp:pager> 
     </xp:panel> 
     <div style="clear:both;"></div> 
     <br /> 
     <xp:repeat id="rptProduct" rows="16" value="#{vwProduct}" 
      var="productRow"> 
      <xp:panel styleClass="linkPanel" id="panel1"> 
       <xp:text escape="false" id="imgHTML" 
        value="#{productRow.$ClientName}"> 
       </xp:text> 

      </xp:panel> 
     </xp:repeat> 

    </xp:panel> 


</xp:view> 
+0

Большое спасибо за ваш ответ - он работает, но проблема в том, что при изменении страницы нет. щелкнув на элементе управления пейджером, а не в поле со списком, я хочу, чтобы он также изменил значение поля со списком. Поэтому, когда вы нажимаете на pg 2 в пейджере, я хочу, чтобы поле со списком также отображало pg 2. – pipalia

0

Нашли решение, обновив его на стороне клиента, возможно, можно улучшить с помощью jquery или dojo.

После комбинированного окна, я добавил следующее вычисляемое поле (я жёстко 16 на данный момент, так как у меня есть 16 строк на странице):

<xp:text escape="false" id="computedField1"> 
    <xp:this.value><![CDATA[#{javascript:var cmbFieldName:String = getClientId("cmbPages"); 
var strJS:java.lang.StringBuffer = new java.lang.StringBuffer(); 
var rptControl:com.ibm.xsp.component.xp.XspDataIterator = getComponent("rptProduct"); 

strJS.append("<script>"); 

strJS.append("$(function() {"); 

strJS.append("document.getElementById(\"" + cmbFieldName + "\").value = \"" + ((rptControl.getFirst()/16) + 1) + "\";"); 

strJS.append("});"); 

strJS.append("</script>"); 

return strJS.toString();}]]></xp:this.value> 
</xp:text> 

И что сделал трюк!