向多页TABLE中插入数据时,新增行总是在当前页的最后一行

CODE IN CO

OATableBean table =
(OATableBean)webBean.findChildRecursive("LineTable");
int numOfRowsDisplay = table.getNumberOfRowsDisplayed();
Serializable[] param01 = { new Number(numOfRowsDisplay) };
Class[] classType = new Class[] { Number.class, };
am.invokeMethod("addPlanLines", param01, classType);

CODE IN AM

public void addPlanLines(Number numOfDisplay) {
OADBTransaction tsn = this.getOADBTransaction(); CuxPosAuditPlanLinesFullVOImpl lineVO =
getCuxPosAuditPlanLinesFullVO();
Number planId = getPlanId(); lineVO.setMaxFetchSize(0);
if (!lineVO.isPreparedForExecution()) {
lineVO.setWhereClause(null);
lineVO.executeQuery();
} RowSet localRowSet = lineVO.getRowSet(); int i = 1;
int j = numOfDisplay.intValue();
int rangeStart = localRowSet.getRangeStart();
int rangeSize = localRowSet.getRangeSize();
int rowCountInRange = localRowSet.getRowCountInRange();
int i1;
if (rowCountInRange + i <= j)
i1 = rowCountInRange;
else {
i1 = j - i;
}
CuxPosAuditPlanLinesFullVORowImpl row =
(CuxPosAuditPlanLinesFullVORowImpl)lineVO.createRow();
if (rangeSize < i1) {
rangeSize++;
localRowSet.setRangeSize(rangeSize);
localRowSet.setRangeStart(rangeStart);
} row.setPlanId(planId);
Number pk = getSequenceValue("CUX_POS_AUDIT_PLAN_LINES_S");
row.setLineId(pk);
row.setOrgId(new Number(tsn.getOrgId()));
row.setOrgName(getOrgName(tsn.getOrgId()));
localRowSet.insertRowAtRangeIndex(i1, row);
localRowSet.setCurrentRowAtRangeIndex(i1);
}

方法二:


/**
* This method is for use with UI Table addRows buttons that require the
* addition of multiple rows; given a RowIterator (such as a VO) and the
* number of rows the caller needs to add, this method figures out where
* the caller should start adding rows in order to comply with the BLAF
* standard that newly added rows should go into the bottom of the current
* table range (which is the same as the RowIterator range if things are
* set up properly), pushing rows into the next range if necessary
*
* Returns: range-based (not absolute) index within the current range
*/
public static int getStartIndexForMultiInsert(RowIterator rowIt, int numRowsToAdd)
{
int numRowsInRange = rowIt.getRowCountInRange();
int rangeSize = rowIt.getRangeSize();
int firstIndexAtWhichToAdd = 0;
int numOpenSlotsInRange = (rangeSize - numRowsInRange); if (rowIt.getRangeSize() < rangeSize)
{
rowIt.setRangeSize(rangeSize);
} if (numOpenSlotsInRange < numRowsToAdd)
{
firstIndexAtWhichToAdd = rangeSize - numRowsToAdd;
}
else
{
firstIndexAtWhichToAdd = numRowsInRange;
} return firstIndexAtWhichToAdd;
} 调用:
int indexForRowInserts = getStartIndexForMultiInsert(vo, 1);
vo.insertRowAtRangeIndex(indexForRowInserts,row);

方法三:

这种方法有点小问题:

仅仅在第一页有效,应该可以再修改修改,懒得改了

calculVO.insertRow(row);
int fetched = calculVO.getFetchedRowCount();
fetched = fetched > 9 ? 9 : fetched;
if (fetched > 0)
{
int current = fetched % 10;
if (current == 0)
{
fetched = 9;
} else
{
fetched = current > 9 ? 9 : current;
}
}
calculVO.insertRowAtRangeIndex(fetched, row);
上一篇:06.linux文件目录操作命令


下一篇:假如数组接收到一个null,那么应该怎么循环输出。百度结果,都需要提前判断。否则出现空指针异常。。我还是想在数组中实现保存和输出null。