Сгенерированные ссылки сортировки и разбивки на страницы (URL) слишком длинные
При использовании displaytag URL-адрес, который он генерирует для подкачки и сортировки, слишком длинный для IE.
Есть ли способ обойти это, не прибегая к внешней подкачке и сортировке?
Приветствия.
2 ответа
Надеюсь, это кому-нибудь поможет. И если есть другой способ, то дайте мне знать.
Я обошел это путем исключения всех параметров из тега таблицы отображения.
<display:table excludedParams="*"> ... </display:table>
Это означает, что URL не заполняется параметрами.
Отлично, но как вы держите ручку в списке объектов, которые мы используем?
Я сделал это, установив атрибут в запросе контекста. И поскольку я использую инфраструктуру Stripes, я сделал это с помощью ActionBeanContext.
public class SchemeActionBeanContext extends ActionBeanContext {
public void setThings(List<Things> things) {
getRequest().getSession().setAttribute("stuff", things);
}
public List<Things> getThings() {
return (List<Things>)getRequest().getSession().getAttribute("stuff");
}
И тогда вы можете установить и получить их на протяжении всего жизненного цикла, если страница / запрос.
Я столкнулся с подобной проблемой, когда URL со всеми полями формы добавлялся к URL во время разбивки на страницы и сортировки. Это было решено путем идентификации всех ссылок на страницы, упомянутых ниже, либо по уникальному названию, которое он формирует (Перейти на страницу), либо по внутренним htmls, таким как 'Next' 'Prev' и т. Д., Которые он формирует.
Здесь объясняются параметры javascript в методе ниже 1) head1/head2 - переданы имена столбцов сортировки. 2) formName - имя формы, 3) masterName - метод, вызываемый в вашем контроллере
У меня есть логика в поле ввода с именем 'strNamesearch', на основе которого изменяется мой вызывающий метод.
Также обратите внимание, что после того, как вы это сделаете, не забудьте добавить excalparams="*" в display:table tag
Вот код:
function findAnchorGen(head1,head2,formName,masterName) {
var formObj = eval("document."+formName);
var methodName;
var strSearch = trim(formObj.strNamesearch.value);
if(strSearch == null || strSearch == '') {
methodNameP = "fetch"+masterName;
} else {
methodNameP = "search"+masterName;
}
var anchors = document.links; // your anchor collection
var i = anchors.length;
while (i--) {
var a = anchors[i];
var aRef = a.href;
var aTitle = a.title;
index = aTitle.indexOf("Go to page");
var inHtml = a.innerHTML;
if(index >= 0 || inHtml == 'Last' || inHtml == 'Next' || inHtml == 'First' || inHtml == 'Prev' || inHtml == head1 || inHtml == head2) {
//alert("Ref = " + aRef + " | title = " + aTitle + " | inner html = " + a.innerHTML);
a.href="#";
a.onclick = (function(aRef,formName,methodNameP){return function(){fSubmit(aRef,formName,methodNameP);}})(aRef,formName,methodNameP);
}
}
}
function fSubmitGen(aRef,formName,methodNameP) {
var formObj = eval("document."+formName);
formObj.action = aRef;
formObj.method.value = methodNameP;
formObj.submit();
}
Это обходной путь, и он хорошо работает для нас. Я надеюсь, что это работает и для вас.