View LotusDomino:web上的视图分页

View LotusDomino:web上的视图分页,view,pagination,lotus-domino,View,Pagination,Lotus Domino,我在许多论坛上读到关于如何实现视图分页的解决方案,但我没有解决它 我创建了$$ViewTemplateDefault,其中包含一些用于下一个、上一个的个性化热点按钮和一个文本字段$$ViewBody。(或者,嵌入式视图) 任何提示和帮助都将不胜感激 为了清楚起见,我将用几句话来解释: 因此,最初:前30行将显示=>在右角:第1页 如果单击Next=>接下来的30行=>第2页。等等。我理解您的问题,您有一个工作表单$$ViewTemplateDefault,现在正在寻找在该表单中显示当前页码“pa

我在许多论坛上读到关于如何实现视图分页的解决方案,但我没有解决它

我创建了
$$ViewTemplateDefault
,其中包含一些用于
下一个
上一个
的个性化热点按钮和一个文本字段
$$ViewBody
。(或者,嵌入式视图)

任何提示和帮助都将不胜感激

为了清楚起见,我将用几句话来解释:

因此,最初:前30行将显示=>在右角:第1页


如果单击Next=>接下来的30行=>第2页。等等。

我理解您的问题,您有一个工作表单$$ViewTemplateDefault,现在正在寻找在该表单中显示当前页码“page nn”的可能性

我假设您使用
@DbCommand(“Domino”;“ViewNextPage”)
获取下一页,使用
@DbCommand(“Domino”;“ViewPreviousPage”)
获取上一页

下一个和上一个功能的工作方式始终是一个文档“重叠”。如果您每页有30行,并单击“下一步”,则最后一个文档将位于下一页的第一行,另外还会显示下一个29行。您可以在已使用的URL参数“&Start=”:1中看到这一点。。。30 ... 59 ... 88

知道这一点后,您可以通过以下方式计算当前页码:

_start := @ToNumber(@Replace(@UrlQueryString("start"); ""; "1"));
_count := @ToNumber(@Replace(@UrlQueryString("count"); ""; "30")) - 1;
@Integer((@ToNumber(_start) / _count) + 1)
请注意,这仅适用于未分类和不可折叠的视图

您可以找到更复杂的解决方案。它还具有其他功能,如转到页面和每页文档

如果你有机会完成你的项目,那么改用XPages。您可以更轻松地进行分页,因为它是“开箱即用”的

更新:

您将无法为分类视图找到合理的解决方案。如果您不想使用RESTAPI,您必须使用Domino视图URL参数(查找“OpenView”)。您无法从“&Start=”或任何其他参数判断您当前所在的页面


获得良好工作分页的最简单方法是使用XPages。希望您可以在项目中使用它…

这里还有一个分类视图的工作解决方案。它基于上一个页码计算当前页码,并使用cookie

将通过HTML文本
的路径添加到表单中,以显示页码:

并将以下代码作为Web/JavaScript添加到表单的
onLoad
事件中:

function getURLParameter(parameter) {
  return decodeURIComponent((new RegExp('[?|&]' + parameter + '=' + '([^&;]+?)(&|#|;|$)').exec(location.search) || [, ""])[1].replace(/\+/g, '%20')) || null;
}
function getCookie(cname) {
    var name = cname + "=";
    var ca = document.cookie.split(';');
    for(var i=0; i<ca.length; i++) {
        var c = ca[i].trim();
        if (c.indexOf(name)==0) return c.substring(name.length,c.length);
    }
    return "";
}
function compareStart(start1, start2) {
    var list1 = start1.split(".");
    var list2 = start2.split(".");
    for (i=0; i <100; i++) {
        var value1 = list1[i];
        var value2 = list2[i];
        if (value1 == null) {
            return value2 == null ? 0 : -1;
        } else if (value2 == null) {
                return 1;
        }
        value1 = Math.round(value1);
        value2 = Math.round(value2);
        if (value1 !== value2) {
            return value1 < value2 ? -1 : 1;
        }
    }
}
var start = getURLParameter("Start");
var page = "1";
if  (start == null || start === "1") {
    window.name = Math.floor((Math.random()*10000)+1);
    start = "1";
} else {
    page =  getCookie("page" + window.name);
    var oldStart = getCookie("start" + window.name);
    page = Math.round(page) + compareStart(start, oldStart);
}
document.getElementById('pageNumber').innerHTML = page;
document.cookie = "page" + window.name + "=" + page;
document.cookie = "start" + window.name + "=" + start;
函数getURLParameter(参数){ 返回decodeURIComponent((新的RegExp('[?&]'+参数+'='+'([^&]+?)(&&| | | | | | | | | | | |$)).exec(location.search)| | |[,'')[1]。替换(/\+//g,'%20'))| |空; } 函数getCookie(cname){ 变量名称=cname+“=”; var ca=document.cookie.split(“;”);
对于(var i=0;i您在“下一个”和“上一个”的热点按钮中放置了什么?单击它们时会发生什么?您看过其他人的代码吗?有很多示例可以查看,例如标准讨论模板中的视图模板。感谢您的回复。我的视图每次列出30行。下一个=>下一个30行nes。类似地,上一个按钮。这是正常的默认行为。如果你想让它做一些不同的事情,那么你需要重新编写你的问题,告诉我们你想让它做什么;你需要向我们展示你已经尝试了什么,并告诉我们发生了什么。请查看关于如何提出好问题的指南,我不认为在web下对视图进行分页是一种正常的默认行为。如果是这样,你能告诉我它是如何工作的吗?确切地说,我想你不知道。祝你有好的一天,祝你好运,把-1指向你不知道答案的问题。很抱歉,你不相信我,但每个视图30行绝对是Domino web服务的默认行为呃。您可以通过转到服务器上Domino目录中服务器文档中的Web引擎选项卡并更改标记为“每个查看页面的默认行”的字段来更改该默认值。在某些服务器上,该设置可能在其他位置,即在Internet站点文档中。每个vi中显示的最大条目数也有一个设置ew,您可以将其设置为零,但这会影响服务器上所有数据库中的所有视图。感谢您的响应。不幸的是,我使用的是分类视图;(。此外,当我单击“下一步/上一步”时,我的URL不会显示&Start变量。@DbCommand(“Domino”;“ViewNextPage”);@SetTargetFrame(“Myframe”)您必须在没有框架集的情况下测试它才能查看OpenView URL参数-只需在浏览器中打开一个视图,并将“下一步/上一步”按钮减少到@DbCommand()。我测试了它,但它会在浏览器的另一个选项卡中打开视图。考虑到这一点,我想使用@SetTargetFrame…在Designer中打开“Web浏览器中的设计/预览/…”菜单中的视图。然后您应该会看到类似
http://Server/Database.nsf/ViewName?OpenView
在浏览器中。请告诉我如何在表单上插入通过HTML文本的路径?将文本写入表单,标记文本,然后单击菜单“文本/通过HTML的路径”它能工作!太棒了!我观察到,即使你在窗口的两个不同选项卡中打开应用程序,它也能工作。非常感谢!(再次)现在我必须研究OnLoad事件的代码。关于cookies,一个(愚蠢的)问题:如果cookies被删除,而应用程序在web上运行,它还能工作吗?