Author: jleroux
Date: Sat Jan 18 10:19:44 2014 New Revision: 1559338 URL: http://svn.apache.org/r1559338 Log: A patch from Leon for "Form pagination fails if total length of search condition is more than about 2~3k bytes" https://issues.apache.org/jira/browse/OFBIZ-5478 Since it uses "GET" method to submit the pagination request, it's restricted by the URL max length limitation. The patch attached changes the submit way from GET to "POST" if total length of URL > 2k. jleroux: I also sort of (found after it was due to it) reverted r1204170, I don't see the reason for this now, and it was useless duplicating the current entry in the page size dropdown Modified: ofbiz/trunk/framework/images/webapp/images/fieldlookup.js ofbiz/trunk/framework/images/webapp/images/selectall.js ofbiz/trunk/framework/widget/templates/htmlFormMacroLibrary.ftl Modified: ofbiz/trunk/framework/images/webapp/images/fieldlookup.js URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/images/webapp/images/fieldlookup.js?rev=1559338&r1=1559337&r2=1559338&view=diff ============================================================================== --- ofbiz/trunk/framework/images/webapp/images/fieldlookup.js (original) +++ ofbiz/trunk/framework/images/webapp/images/fieldlookup.js Sat Jan 18 10:19:44 2014 @@ -542,55 +542,19 @@ var ButtonModifier = function(lookupDiv) // modify nav-pager var navPagers = jQuery("#" + lookupDiv + " .nav-pager a"); jQuery.each(navPagers, function(navPager) { - jQuery(navPagers[navPager]).attr("href", - "javascript:lookupPaginationAjaxRequest('" + encodeURI(jQuery(navPagers[navPager]).attr("href")) + "','link')"); + var onClickEvent = navPagers[navPager].onclick; + navPagers[navPager].onclick = function(){ + this.setAttribute("data-lookupajax", "true"); + onClickEvent.apply(this); + } }); var navPagersSelect = jQuery("#" + lookupDiv + " .nav-pager select"); jQuery.each(navPagersSelect, function(navPager) { - var onChangeEvent = jQuery(navPagersSelect[navPager]).attr("onchange"); - if ((typeof onChangeEvent) == "function") { // IE6/7 Fix - onChangeEvent = onChangeEvent.toString(); - var ocSub = onChangeEvent.substring((onChangeEvent.indexOf('=') + 3), (onChangeEvent.length - 4)); - // define search pattern we must seperate between IE and - // Other Browser - var searchPattern = /" \+ this.value \+ "/g; - var searchPattern_IE = /'\+this.value\+'/g; - var searchPattern2 = /" \+ this.valu/g; - var searchPattern2_IE = /'\+this.valu/g; - - if (searchPattern.test(ocSub)) { - var viewSize = navPagersSelect[navPager].value; - var spl = ocSub.split(searchPattern); - navPagersSelect[navPager].onchange = function() { - lookupPaginationAjaxRequest(spl[0] + this.value + spl[1], 'select'); - }; - } else if (searchPattern_IE.test(ocSub)) { - var viewSize = navPagersSelect[navPager].value; - var spl = ocSub.split(searchPattern_IE); - navPagersSelect[navPager].onchange = function() { - lookupPaginationAjaxRequest("/" + spl[0] + this.value + spl[1], 'select'); - }; - } else if (searchPattern2.test(ocSub)) { - ocSub = ocSub.replace(searchPattern2, ""); - if (searchPattern.test(ocSub)) { - ocSub.replace(searchPattern, viewSize); - } - navPagersSelect[navPager].onchange = function() { - lookupPaginationAjaxRequest(ocSub + this.value, 'select'); - }; - } else if (searchPattern2_IE.test(ocSub)) { - ocSub = ocSub.replace(searchPattern2_IE, ""); - if (searchPattern_IE.test(ocSub)) { - ocSub.replace(searchPattern_IE, viewSize); - } - navPagersSelect[navPager].onchange = function() { - lookupPaginationAjaxRequest("/" + ocSub + this.value, 'select'); - }; - } - } else { - var ocSub = onChangeEvent.substring((onChangeEvent.indexOf('=') + 1), (onChangeEvent.length - 1)); - navPagersSelect[navPager].setAttribute("onchange", "lookupPaginationAjaxRequest(" + ocSub + ",'')"); + var onChangeEvent = navPagersSelect[navPager].onchange; + navPagersSelect[navPager].onchange = function(){ + this.setAttribute("data-lookupajax", "true"); + onChangeEvent.apply(this); } }); } @@ -685,7 +649,9 @@ function lookupPaginationAjaxRequest(nav var screenletTitleBar = jQuery("#" + lookupId + " .screenlet-title-bar :visible:first"); jQuery.ajax({ - url : navAction, + url : navAction.substring(0, navAction.indexOf("?")), + type : "POST", + data : navAction.substring(navAction.indexOf("?")+1, navAction.length), beforeSend : function(jqXHR, settings) { // Here we append the spinner to the lookup screenlet and it will // shown till the ajax request is processed. Modified: ofbiz/trunk/framework/images/webapp/images/selectall.js URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/images/webapp/images/selectall.js?rev=1559338&r1=1559337&r2=1559338&view=diff ============================================================================== --- ofbiz/trunk/framework/images/webapp/images/selectall.js (original) +++ ofbiz/trunk/framework/images/webapp/images/selectall.js Sat Jan 18 10:19:44 2014 @@ -942,4 +942,46 @@ function showErrorAlert(errBoxTitle, err } }); } +} + +/** + * Submit the pagination request + * @param obj The DOM object of pagination anchor or select element + * @param url The pagination URL + */ +function submitPagination(obj, url) { + if (obj.getAttribute("data-lookupajax") == "true" && typeof window.lookupPaginationAjaxRequest == "function") { + lookupPaginationAjaxRequest(url, (obj.tagName == "SELECT" ? "select" : "link")); + return false; + } + if (url.length > 2000) { + var request = url.substring(0, url.indexOf("?")); + var params = url.substring(url.indexOf("?")+1, url.length); + var paramsArray = params.split("&"); + var form = document.createElement("form"); + form.setAttribute("method", "post"); + form.setAttribute("action", request); + for (var i = 0; i < paramsArray.length; i ++) { + var param = paramsArray[i]; + if (param!= "" && param.indexOf("=") > 0) { + var keyValue = param.split("="); + var hiddenField = document.createElement("input"); + hiddenField.setAttribute("type", "hidden"); + hiddenField.setAttribute("name", keyValue[0]); + hiddenField.setAttribute("value", keyValue[1]); + form.appendChild(hiddenField); + } + } + document.body.appendChild(form); + form.submit(); + return false; + } else { + if (obj.tagName == "SELECT") { + location.href = url; + return false; + } else { + obj.href = url; + return true; + } + } } \ No newline at end of file Modified: ofbiz/trunk/framework/widget/templates/htmlFormMacroLibrary.ftl URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/widget/templates/htmlFormMacroLibrary.ftl?rev=1559338&r1=1559337&r2=1559338&view=diff ============================================================================== --- ofbiz/trunk/framework/widget/templates/htmlFormMacroLibrary.ftl (original) +++ ofbiz/trunk/framework/widget/templates/htmlFormMacroLibrary.ftl Sat Jan 18 10:19:44 2014 @@ -740,21 +740,21 @@ Parameter: lastViewName, String, optiona <#if listSize gt viewSize> <div class="${paginateStyle}"> <ul> - <li class="${paginateFirstStyle}<#if viewIndex gt 0>"><a href="<#if ajaxEnabled>javascript:ajaxUpdateAreas('${ajaxFirstUrl}')<#else>${firstUrl}</#if>">${paginateFirstLabel}</a><#else>-disabled"><span>${paginateFirstLabel}</span></#if></li> - <li class="${paginatePreviousStyle}<#if viewIndex gt 0>"><a href="<#if ajaxEnabled>javascript:ajaxUpdateAreas('${ajaxPreviousUrl}')<#else>${previousUrl}</#if>">${paginatePreviousLabel}</a><#else>-disabled"><span>${paginatePreviousLabel}</span></#if></li> - <#if listSize gt 0 && javaScriptEnabled><li class="nav-page-select">${pageLabel} <select name="page" size="1" onchange="<#if ajaxEnabled>javascript:ajaxUpdateAreas('${ajaxSelectUrl}')<#else>location.href='${selectUrl}'+this.value;</#if>"><#rt/> + <li class="${paginateFirstStyle}<#if viewIndex gt 0>"><a href="javascript:void(0)" onclick="<#if ajaxEnabled>ajaxUpdateAreas('${ajaxFirstUrl}')<#else>submitPagination(this, '${firstUrl}')</#if>">${paginateFirstLabel}</a><#else>-disabled"><span>${paginateFirstLabel}</span></#if></li> + <li class="${paginatePreviousStyle}<#if viewIndex gt 0>"><a href="javascript:void(0)" onclick="<#if ajaxEnabled>ajaxUpdateAreas('${ajaxPreviousUrl}')<#else>submitPagination(this, '${previousUrl}')</#if>">${paginatePreviousLabel}</a><#else>-disabled"><span>${paginatePreviousLabel}</span></#if></li> + <#if listSize gt 0 && javaScriptEnabled><li class="nav-page-select">${pageLabel} <select name="page" size="1" onchange="<#if ajaxEnabled>ajaxUpdateAreas('${ajaxSelectUrl}')<#else>submitPagination(this, '${selectUrl}'+this.value)</#if>"><#rt/> <#assign x=(listSize/viewSize)?ceiling> <#list 1..x as i> <#if i == (viewIndex+1)><option selected="selected" value="<#else><option value="</#if>${i-1}">${i}</option> </#list> </select></li> </#if> - <li class="${paginateNextStyle}<#if highIndex lt listSize>"><a href="<#if ajaxEnabled>javascript:ajaxUpdateAreas('${ajaxNextUrl}')<#else>${nextUrl}</#if>">${paginateNextLabel}</a><#else>-disabled"><span>${paginateNextLabel}</span></#if></li> - <li class="${paginateLastStyle}<#if highIndex lt listSize>"><a href="<#if ajaxEnabled>javascript:ajaxUpdateAreas('${ajaxLastUrl}')<#else>${lastUrl}</#if>">${paginateLastLabel}</a><#else>-disabled"><span>${paginateLastLabel}</span></#if></li> - <#if javaScriptEnabled><li class="nav-pagesize"><select name="pageSize" size="1" onchange="<#if ajaxEnabled>javascript:ajaxUpdateAreas('${ajaxSelectSizeUrl}')<#else>location.href='${selectSizeUrl}';</#if>"><#rt/> - <#assign availPageSizes = [viewSize, 20, 30, 50, 100, 200]> + <li class="${paginateNextStyle}<#if highIndex lt listSize>"><a href="javascript:void(0)" onclick="<#if ajaxEnabled>ajaxUpdateAreas('${ajaxNextUrl}')<#else>submitPagination(this, '${nextUrl}')</#if>">${paginateNextLabel}</a><#else>-disabled"><span>${paginateNextLabel}</span></#if></li> + <li class="${paginateLastStyle}<#if highIndex lt listSize>"><a href="javascript:void(0)" onclick="<#if ajaxEnabled>ajaxUpdateAreas('${ajaxLastUrl}')<#else>submitPagination(this, '${lastUrl}')</#if>">${paginateLastLabel}</a><#else>-disabled"><span>${paginateLastLabel}</span></#if></li> + <#if javaScriptEnabled><li class="nav-pagesize"><select name="pageSize" size="1" onchange="<#if ajaxEnabled>ajaxUpdateAreas('${ajaxSelectSizeUrl}')<#else>submitPagination(this, '${selectSizeUrl}')</#if>"><#rt/> + <#assign availPageSizes = [20, 30, 50, 100, 200]> <#list availPageSizes as ps> - <option<#if viewSize == ps> selected="selected" </#if> value="${ps}">${ps}</option> + <option <#if viewSize == ps> selected="selected" </#if> value="${ps}">${ps}</option> </#list> </select> ${paginateViewSizeLabel}</li> </#if> |
Free forum by Nabble | Edit this page |