xpages 中的自定义寻呼机

发布于 2025-01-08 09:43:53 字数 4138 浏览 4 评论 0原文

我正在尝试创建一个与寻呼机相结合的页面计数器,我发现了这篇有趣的文章:

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>

致谢:感谢 Bruce Lill 提出隐藏寻呼机的想法。

I am trying to create a go to page counter combined with the pager and I found this interesting article:

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

I have it working, but would like to change the page no. in the combo box when a page no. is clicked on in the pager (pager is doing a partial refresh at the moment). I thought of the defaultValue property at first of the combo box but that didn't work. Any ideas please?

Here is some example code:

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

Credits: Thanks to Bruce Lill for the hidden pager idea.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

染墨丶若流云 2025-01-15 09:43:53

很少有人给我发电子邮件提出同样的问题。从那时起我就更新了我的文章。你试过了吗?

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

基本上,您已将一段代码放入 beforeRenderResponse 事件中,如此处所述。如果这不能解决问题,请告诉我。我的数据库中有它的工作。

Few people e-mailed me with the same question. Since then I have updated my article. Have you tried that yet.

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

Basically, you have put a piece of code in the beforeRenderResponse event as explained there. Let me know if that didn't resolve the problem. I have it working in my database.

盗心人 2025-01-15 09:43:53

我有以下代码工作。它在 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: 
                    <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>

I have the following code working. It is changing pages with the combobox, in IE9 and 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: 
                    <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>
清泪尽 2025-01-15 09:43:53

通过在客户端更新它找到了解决方案,可能可以使用 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>

这就成功了!

Found a solution by updating it on client-side, probably could be improved using jquery or dojo.

After the combo box, I added the following computed field (I have hard coded 16 for now, since I have 16 rows per page):

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

And that did the trick!

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文