Сгенерированные ссылки DisplayTag Sort и Pagination (url) слишком длинные

При использовании displaytag URL-адрес, который он генерирует для разбиения по страницам и сортировки, слишком длинный для IE.

Есть ли способ обойти это, не прибегая к внешней подкачке и сортировке?

Ваше здоровье.


person enkor    schedule 22.06.2010    source источник


Ответы (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");
    }

И затем вы можете установить и получить их на протяжении всего жизненного цикла страницы/запроса.

person enkor    schedule 24.06.2010

Я столкнулся с аналогичной проблемой, когда URL-адрес со всеми полями формы добавлялся к URL-адресу во время разбиения на страницы и сортировки. Это было решено путем идентификации всех ссылок на страницы, упомянутых ниже, либо по уникальному заголовку, который он формирует (Перейти на страницу), либо по внутренним HTML-кодам, таким как «Следующая», «Предыдущая» и т. д., которые он формирует.

Параметры javascript в приведенном ниже методе объясняются здесь 1) head1/head2 - сортировка имен столбцов. 2) formName - имя формы, 3) masterName - метод, вызываемый в вашем контроллере

У меня есть логика в поле ввода с именем «strNamesearch», на основе которой изменяется мой метод вызова.

Также обратите внимание: как только вы это сделаете, не забудьте добавить excludeParams="*" в тег display:table.

Вот код:

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();
}

Это обходной путь, и он хорошо работает для нас. Я надеюсь, что это сработает и для вас.

person mga    schedule 25.02.2011