in framework/widget/src/main/java/org/apache/ofbiz/widget/renderer/macro/MacroFormRenderer.java [1586:1826]
public void renderNextPrev(Appendable writer, Map<String, Object> context, ModelForm modelForm) {
boolean ajaxEnabled = false;
List<ModelForm.UpdateArea> updateAreas = modelForm.getOnPaginateUpdateAreas();
String targetService = modelForm.getPaginateTarget(context);
if (this.javaScriptEnabled) {
if (UtilValidate.isNotEmpty(updateAreas)) {
ajaxEnabled = true;
}
}
if (targetService == null) {
targetService = "${targetService}";
}
if (UtilValidate.isEmpty(targetService) && updateAreas == null) {
Debug.logWarning("Cannot paginate because TargetService is empty for the form: " + modelForm.getName(), MODULE);
return;
}
// get the parameterized pagination index and size fields
int paginatorNumber = WidgetWorker.getPaginatorNumber(context);
String viewIndexParam = modelForm.getMultiPaginateIndexField(context);
String viewSizeParam = modelForm.getMultiPaginateSizeField(context);
int viewIndex = Paginator.getViewIndex(modelForm, context);
int viewSize = Paginator.getViewSize(modelForm, context);
int listSize = Paginator.getListSize(context);
int lowIndex = Paginator.getLowIndex(context);
int highIndex = Paginator.getHighIndex(context);
int actualPageSize = Paginator.getActualPageSize(context);
// needed for the "Page" and "rows" labels
Map<String, String> uiLabelMap = UtilGenerics.cast(context.get("uiLabelMap"));
String pageLabel = "";
String commonDisplaying = "";
if (uiLabelMap == null) {
Debug.logWarning("Could not find uiLabelMap in context", MODULE);
} else {
pageLabel = uiLabelMap.get("CommonPage");
Map<String, Integer> messageMap = UtilMisc.toMap("lowCount", lowIndex + 1, "highCount", lowIndex + actualPageSize, "total", listSize);
commonDisplaying = UtilProperties.getMessage("CommonUiLabels", "CommonDisplaying", messageMap, (Locale) context.get("locale"));
}
// for legacy support, the viewSizeParam is VIEW_SIZE and viewIndexParam is VIEW_INDEX when the fields are "viewSize" and "viewIndex"
if (("viewIndex" + "_" + paginatorNumber).equals(viewIndexParam)) {
viewIndexParam = "VIEW_INDEX" + "_" + paginatorNumber;
}
if (("viewSize" + "_" + paginatorNumber).equals(viewSizeParam)) {
viewSizeParam = "VIEW_SIZE" + "_" + paginatorNumber;
}
String str = (String) context.get("_QBESTRING_");
// refresh any csrf token in the query string for pagination
String tokenValue = CsrfUtil.generateTokenForNonAjax(request, targetService);
str = CsrfUtil.addOrUpdateTokenInQueryString(str, tokenValue);
// strip legacy viewIndex/viewSize params from the query string
String queryString = UtilHttp.stripViewParamsFromQueryString(str, "" + paginatorNumber);
// strip parameterized index/size params from the query string
Set<String> paramNames = new HashSet<>();
paramNames.add(viewIndexParam);
paramNames.add(viewSizeParam);
queryString = UtilHttp.stripNamedParamsFromQueryString(queryString, paramNames);
String anchor = "";
String paginateAnchor = modelForm.getPaginateTargetAnchor();
if (UtilValidate.isNotEmpty(paginateAnchor)) {
anchor = "#" + paginateAnchor;
}
// Create separate url path String and request parameters String,
// add viewIndex/viewSize parameters to request parameter String
String urlPath = UtilHttp.removeQueryStringFromTarget(targetService);
String prepLinkText = UtilHttp.getQueryStringFromTarget(targetService);
String prepLinkSizeText;
if (UtilValidate.isNotEmpty(queryString)) {
queryString = UtilHttp.encodeAmpersands(queryString);
}
if (prepLinkText.indexOf('?') < 0) {
prepLinkText += "?";
} else if (!prepLinkText.endsWith("?")) {
prepLinkText += "&";
}
if (UtilValidate.isNotEmpty(queryString) && !"null".equals(queryString)) {
prepLinkText += queryString + "&";
}
prepLinkSizeText = prepLinkText + viewSizeParam + "='+this.value+'" + "&" + viewIndexParam + "=0";
prepLinkText += viewSizeParam + "=" + viewSize + "&" + viewIndexParam + "=";
if (ajaxEnabled) {
// Prepare params for prototype.js
prepLinkText = prepLinkText.replace("?", "");
prepLinkText = prepLinkText.replace("&", "&");
}
String linkText;
String paginateStyle = modelForm.getPaginateStyle();
String paginateFirstStyle = modelForm.getPaginateFirstStyle();
String paginateFirstLabel = modelForm.getPaginateFirstLabel(context);
String firstUrl = "";
String ajaxFirstUrl = "";
String paginatePreviousStyle = modelForm.getPaginatePreviousStyle();
String paginatePreviousLabel = modelForm.getPaginatePreviousLabel(context);
String previousUrl = "";
String ajaxPreviousUrl = "";
String selectUrl = "";
String ajaxSelectUrl = "";
String paginateViewSizeLabel = modelForm.getPaginateViewSizeLabel(context);
String selectSizeUrl = "";
String ajaxSelectSizeUrl = "";
String paginateNextStyle = modelForm.getPaginateNextStyle();
String paginateNextLabel = modelForm.getPaginateNextLabel(context);
String nextUrl = "";
String ajaxNextUrl = "";
String paginateLastStyle = modelForm.getPaginateLastStyle();
String paginateLastLabel = modelForm.getPaginateLastLabel(context);
String lastUrl = "";
String ajaxLastUrl = "";
if (viewIndex > 0) {
if (ajaxEnabled) {
ajaxFirstUrl = MacroCommonRenderer.createAjaxParamsFromUpdateAreas(updateAreas, null, modelForm, prepLinkText + 0 + anchor, context);
} else {
linkText = prepLinkText + 0 + anchor;
firstUrl = rh.makeLink(this.request, this.response, urlPath + linkText);
}
}
if (viewIndex > 0) {
if (ajaxEnabled) {
ajaxPreviousUrl = MacroCommonRenderer.createAjaxParamsFromUpdateAreas(updateAreas, null, modelForm,
prepLinkText + (viewIndex - 1) + anchor, context);
} else {
linkText = prepLinkText + (viewIndex - 1) + anchor;
previousUrl = rh.makeLink(this.request, this.response, urlPath + linkText);
}
}
// Page select dropdown
if (listSize > 0 && this.javaScriptEnabled) {
if (ajaxEnabled) {
ajaxSelectUrl = MacroCommonRenderer.createAjaxParamsFromUpdateAreas(updateAreas, null, modelForm,
prepLinkText + "' + (this.value - 1) + '", context);
} else {
linkText = prepLinkText;
if (linkText.startsWith("/")) {
linkText = linkText.substring(1);
}
selectUrl = rh.makeLink(this.request, this.response, urlPath + linkText);
}
}
// Next button
if (highIndex < listSize) {
if (ajaxEnabled) {
ajaxNextUrl = MacroCommonRenderer.createAjaxParamsFromUpdateAreas(updateAreas, null,
modelForm, prepLinkText + (viewIndex + 1) + anchor, context);
} else {
linkText = prepLinkText + (viewIndex + 1) + anchor;
nextUrl = rh.makeLink(this.request, this.response, urlPath + linkText);
}
}
// Last button
if (highIndex < listSize) {
int lastIndex = UtilMisc.getViewLastIndex(listSize, viewSize);
if (ajaxEnabled) {
ajaxLastUrl = MacroCommonRenderer.createAjaxParamsFromUpdateAreas(updateAreas, null,
modelForm, prepLinkText + lastIndex + anchor, context);
} else {
linkText = prepLinkText + lastIndex + anchor;
lastUrl = rh.makeLink(this.request, this.response, urlPath + linkText);
}
}
// Page size select dropdown
if (listSize > 0 && this.javaScriptEnabled) {
if (ajaxEnabled) {
ajaxSelectSizeUrl = MacroCommonRenderer.createAjaxParamsFromUpdateAreas(updateAreas, null,
modelForm, prepLinkSizeText + anchor, context);
} else {
linkText = prepLinkSizeText;
if (linkText.startsWith("/")) {
linkText = linkText.substring(1);
}
selectSizeUrl = rh.makeLink(this.request, this.response, urlPath + linkText);
}
}
StringWriter sr = new StringWriter();
sr.append("<@renderNextPrev ");
sr.append(" paginateStyle=\"");
sr.append(paginateStyle);
sr.append("\" paginateFirstStyle=\"");
sr.append(paginateFirstStyle);
sr.append("\" viewIndex=");
sr.append(Integer.toString(viewIndex));
sr.append(" highIndex=");
sr.append(Integer.toString(highIndex));
sr.append(" listSize=");
sr.append(Integer.toString(listSize));
sr.append(" viewSize=");
sr.append(Integer.toString(viewSize));
sr.append(" ajaxEnabled=");
sr.append(Boolean.toString(ajaxEnabled));
sr.append(" javaScriptEnabled=");
sr.append(Boolean.toString(javaScriptEnabled));
sr.append(" ajaxFirstUrl=\"");
sr.append(ajaxFirstUrl);
sr.append("\" ajaxFirstUrl=\"");
sr.append(ajaxFirstUrl);
sr.append("\" ajaxFirstUrl=\"");
sr.append(ajaxFirstUrl);
sr.append("\" firstUrl=\"");
sr.append(firstUrl);
sr.append("\" paginateFirstLabel=\"");
sr.append(paginateFirstLabel);
sr.append("\" paginatePreviousStyle=\"");
sr.append(paginatePreviousStyle);
sr.append("\" ajaxPreviousUrl=\"");
sr.append(ajaxPreviousUrl);
sr.append("\" previousUrl=\"");
sr.append(previousUrl);
sr.append("\" paginatePreviousLabel=\"");
sr.append(paginatePreviousLabel);
sr.append("\" pageLabel=\"");
sr.append(pageLabel);
sr.append("\" ajaxSelectUrl=\"");
sr.append(ajaxSelectUrl);
sr.append("\" selectUrl=\"");
sr.append(selectUrl);
sr.append("\" ajaxSelectSizeUrl=\"");
sr.append(ajaxSelectSizeUrl);
sr.append("\" selectSizeUrl=\"");
sr.append(selectSizeUrl);
sr.append("\" commonDisplaying=\"");
sr.append(commonDisplaying);
sr.append("\" paginateNextStyle=\"");
sr.append(paginateNextStyle);
sr.append("\" ajaxNextUrl=\"");
sr.append(ajaxNextUrl);
sr.append("\" nextUrl=\"");
sr.append(nextUrl);
sr.append("\" paginateNextLabel=\"");
sr.append(paginateNextLabel);
sr.append("\" paginateLastStyle=\"");
sr.append(paginateLastStyle);
sr.append("\" ajaxLastUrl=\"");
sr.append(ajaxLastUrl);
sr.append("\" lastUrl=\"");
sr.append(lastUrl);
sr.append("\" paginateLastLabel=\"");
sr.append(paginateLastLabel);
sr.append("\" paginateViewSizeLabel=\"");
sr.append(paginateViewSizeLabel);
sr.append("\" />");
executeMacro(writer, sr.toString());
}