我有一个带有分页的jqgrid。用户可以自己输入数据到页面之间的内容。
如果用户在第199行输入的内容多于可用页面,我会收到错误,如上例所示。如何解决这个问题?
if(noOfRows != null && !recipeList.isEmpty())
if ((noOfRows * pageNo) < recipeList.size()) {
recipeList = recipeList.subList((noOfRows * (pageNo - 1)),
(noOfRows * pageNo));
} else {
recipeList = recipeList.subList((noOfRows * (pageNo - 1)),
recipeList.size()); //line 199: giving error
}
for (Recipe recp : recipeList) {
..............
..............
我试图在第199行更改代码的else部分:
int totalCustomPagesNums=noOfRows * (pageNo - 1);
int firstIndex=totalCustomPagesNums < recipeIdList.size()?totalCustomPagesNums:1;
recipeList = recipeList.subList(firstIndex,
recipeList.size());
答案 0 :(得分:4)
我会将其简化为:
recipeList.size()
recipeList.size()
所以:
int start = Math.min(Math.max(noOfRows * (pageNo - 1), 0), recipeList.size());
int end = Math.min(Math.max(noOfRows * pageNo, start), recipeList.size());
recipeList = recipeList.subList(start, end);
现在你肯定知道0 <= start <= end <= recipeList.size()
,所以即使用户指定奇怪的行数或页码也没关系。
答案 1 :(得分:0)
您正在尝试创建一个从索引100开始并在索引72结束的子列表。由于列表的开头位于结尾,因此您将收到IllegalArgumentException。
添加另一项检查,如果(noOfRows*pageNo < recipeList.size())
。
答案 2 :(得分:0)
我会在代码的开头添加两个额外的块。
if (pageNo < 1) {
pageNo = 1;
}
if ((pageNo - 1) * noOfRows >= recipeList.size()) {
pageNo = 1 + ( recipeList.size() - 1 ) / noOfRows;
}
如果页码太低,第一个块会修复问题。如果页码太高,第二个块会修复问题。
第二个块开头的检查确保要显示的第一个配方的索引((pageNo - 1) * noOfRows
)在recipeList
的范围内。内部的赋值是将pageNo
设置为真实的最高值。