2012-02-23 90 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 2012-02-29 19:01:59

+1

絕對。正如您可能已經知道的那樣,在部分刷新之前觸發BeforeRenderResponse。 – Reevs 2012-02-29 23:47:56

1

我有以下代碼工作。它使用組合框在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

非常感謝您的答覆 - 它的工作,但問題是,當您更改頁面號。通過點擊尋呼機控件,而不是組合框,我希望它改變組合框的值。所以當你在尋呼機上點擊第2頁時,我希望組合框也可以說第2頁。 – pipalia 2012-02-24 00:14:50

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> 

這奏效了!