powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / displaytag - восстановление прежнего состояния таблицы
18 сообщений из 18, страница 1 из 1
displaytag - восстановление прежнего состояния таблицы
    #34597650
whoneedshelp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пробую использовать displaytag библиотеку. Все классно - но вот проблемка. Не пойму как можно сделать так чтобы после возврата на страницу с таблицей - таблица возвращалась в прежнее состояние.
web Приложение написано на struts 1.
приложил war архив (см приложение). Конечно же не стал паковать необходимые библиотеки - вот список того чего нет в архиве в папке WEB-INF/lib:

antlr.jar
commons-beanutils.jar
commons-collections-3.1.jar
commons-digester.jar
commons-fileupload.jar
commons-lang-2.1.jar
commons-logging.jar
commons-validator.jar
displaytag-1.1.jar
displaytag-export-poi-1.1.jar
displaytag-portlet-1.1.jar
itext-1.3.jar
jakarta-oro.jar
jstl.jar
log4j-1.2.12.jar
poi-2.5.1.jar
standard.jar
struts.jar
...
Рейтинг: 0 / 0
displaytag - восстановление прежнего состояния таблицы
    #34597727
whoneedshelp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
суть приложения очень проста:
первой формой вывожу список табличных данных (данные для простоты примера храню в сессии), использую display taglib (классная штука - нутром чую). В таблице применяю сортировку и постраничный вывод по 4 строки на страницу.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
<display-el:table id="dataRow" name="${Data.data.data}" sort="list" pagesize="4"
	defaultsort="1" requestURI="">
	<display-el:setProperty name="basic.show.header" value="true" />
	
	<display-el:column property="data1" title="Data1" sortable="true" />
	<display-el:column property="data2" title="Data2" sortable="true" />
	<display-el:column property="data3" title="Data3" sortable="true" />
	
	<display-el:column media="html">
		<a href="<%=request.getContextPath() %>/ShowDatum.do?data_id=<c:out value='${dataRow.id}'/>">
		Edit </a> 
	</display-el:column>

</display-el:table>

Код: plaintext
1.
2.
3.
4.
5.
...
<display-el:column media="html">
<a href="<%=request.getContextPath() %>/ShowDatum.do?data_id=<c:out value='${dataRow.id}'/>"> Edit </a> 
</display-el:column>
...
У каждой строки формирую ссылочку для редактирования строки. По нажатию на котору попадаем на страницу редактирования данных. Ну тут все очень просто:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
<%@ taglib uri="/tags/struts-html" prefix="html"%>

<html>

<head>
<title>Display Tag Example</title>

</head>

<body>

<h1>Edit Datum</h1>

<html:form action="/SaveDatum.do">
	Data1: <html:text property="data1" /><br/>
	Data2: <html:text property="data2" /><br/>
	Data3: <html:text property="data3" /><br/>
	<html:submit value="Save"/>
</html:form>
</body>
</html>
Здесь редактируем данные и нажимаем на кнопку Save

ИИИ вот здесь проблемка - если мы на первой странице применяли сортировку по какому-нибудь столбцу и допустим переходили на не первую табличную страницу - скажем 2-ю или 3-ю, то после того как нажмем кнопку Save во второй форме - edit.jsp мы попадаем (в прямом смысле и переносном :) ) на первую Web страницу с табличными данными, НО на первую табличную страницу - скажем первую из трех. - вот в этом и проблема. Как сделать так чтобы после нажатия на кнопку Save мы попадали именно в то состояние в котором были до того как нажали ссылку Edit (т.е. например если были на второй табличной странице из трех, то возвратились бы именно на вторую страницу)?

Специально для того чтобы лучше объяснить суть моего вопроса - подготовил этот небольшой пример - вы можете посмотреть прикрепленный выше war файл приложения (нужно будет только добавить необходимый (см. выше) список библиотек)
...
Рейтинг: 0 / 0
displaytag - восстановление прежнего состояния таблицы
    #34597805
ТимоН
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня подобная проблема, только мне нужно было вернуться на страницу после сабмита. Пока только мельком искал решение этой проблемы. Вот в какую сторону нужно смотреть
авторhttp://displaytag.sourceforge.net/11/tut_externalSortAndPage.html
нужно руками формировать урл или добавлять параметры. Отпишитесь если у вас получиться.
...
Рейтинг: 0 / 0
displaytag - восстановление прежнего состояния таблицы
    #34599273
whoneedshelp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
нашел решение - дейсвтительно самый лаконичный способ это реализация интерфейса PaginatedList.
Реализовал свой ArrayList

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
 package  com.mnosinov.displaytag.paginatedlistdemo;

 import  java.util.ArrayList;
 import  java.util.Arrays;
 import  java.util.Collections;
 import  java.util.HashMap;
 import  java.util.List;

 import  org.displaytag.pagination.PaginatedList;
 import  org.displaytag.properties.SortOrderEnum;

 import  example.ByFieldNameComparator;

 public   class  ExternalPaginatedList  extends  ArrayList  implements  PaginatedList {
    private   int  objectsPerPage =  10 ;
    private   int  pageNumber =  1 ;
    private  String searchId =  null ;
    private  String sortCriterion;
    private  SortOrderEnum sortDirection;
    private  HashMap columNames;

    public  ExternalPaginatedList(List data, HashMap columnNames) {
       this .addAll(data);
       this .columNames = columnNames;
   }

    public   int  getFullListSize() {
       return  size();
   }

    public  List getList() {
      List partialList =  new  ArrayList();

       for ( int  i = (pageNumber -  1 ) * objectsPerPage; (i < size())
            && (i < pageNumber * objectsPerPage); i++) {
         partialList.add( this .get(i));
      }

       return  partialList;
   }

    public   int  getObjectsPerPage() {
       return  objectsPerPage;
   }

    public   int  getPageNumber() {
       return  pageNumber;
   }

    public  String getSearchId() {
       return  searchId;
   }

    public  String getSortCriterion() {
       return  sortCriterion;
   }

    public  SortOrderEnum getSortDirection() {
       return  sortDirection;
   }

    public   void  setObjectsPerPage( int  objectsPerPage) {
       this .objectsPerPage = objectsPerPage;
   }

    public   void  setPageNumber( int  pageNumber) {
       this .pageNumber = pageNumber;
   }

    public   void  setSearchId(String searchId) {
       this .searchId = searchId;
   }

    public   void  setSortCriterion(String sortCriterion) {
       this .sortCriterion = sortCriterion;
   }

   /**
    * magic method
    * @param sortDirection
    */
    public   void  setSortDirection(SortOrderEnum sortDirection) {
       this .sortDirection = sortDirection;

      ByFieldNameComparator byFieldNameComparator =  new  ByFieldNameComparator(sortCriterion);
      
      Object[] array =  this .toArray();
      
       if (sortDirection.equals(SortOrderEnum.ASCENDING)) {
         Arrays.sort(array, byFieldNameComparator);
      }  else  {
         Arrays.sort(array, Collections.reverseOrder(byFieldNameComparator));
      }

       this .clear();
       this .addAll(Arrays.asList(array));
   }

}

...
Рейтинг: 0 / 0
displaytag - восстановление прежнего состояния таблицы
    #34599275
whoneedshelp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
реализация интерфейса PaginatedList действительно очень проста для paging. Немножко не проста реализация сортировки по столбцам, для этого пришлось реализовывать свой Comparator:
[SRC java]
package example;

import java.lang.reflect.InvocationTargetException;
import java.util.Comparator;

/**
*
* @author mirbek
* this Comparator class can compare any two same class objects by their same field value
*/
public class ByFieldNameComparator implements Comparator {

private String fieldToCompareName = null;

public ByFieldNameComparator() {

}

public ByFieldNameComparator(String fieldToCompareName) {
this.fieldToCompareName = fieldToCompareName;
}

public int compare(Object o1, Object o2) {
if(fieldToCompareName == null) return 0;
String getterName = "get" + fieldToCompareName.substring(0, 1).toUpperCase()
+ fieldToCompareName.substring(1);
Object dataToCompare1 = null;
Object dataToCompare2 = null;
try {
dataToCompare1 = o1.getClass().getMethod(getterName, null).invoke(o1, null);
dataToCompare2 = o2.getClass().getMethod(getterName, null).invoke(o2, null);
} catch(IllegalArgumentException e) {
e.printStackTrace();
} catch(SecurityException e) {
e.printStackTrace();
} catch(IllegalAccessException e) {
e.printStackTrace();
} catch(InvocationTargetException e) {
e.printStackTrace();
} catch(NoSuchMethodException e) {
e.printStackTrace();
}
return ((Comparable) dataToCompare1).compareTo(dataToCompare2);
}
}

[/SRC
Конечно он не очень универсален - но для моей задачи сгодится (а если надо будет - всегда можно дописать код) - вывод в displaytag ArrayList'a
...
Рейтинг: 0 / 0
displaytag - восстановление прежнего состояния таблицы
    #34599278
whoneedshelp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в Comparator'e использовал динамическое формирование вызова к методу:
Код: plaintext
1.
o1.getClass().getMethod(getterName,  null ).invoke(o1,  null );

Ну а потом в Action'е

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
 package  actions;

 import  java.util.HashMap;

 import  javax.servlet.http.HttpServletRequest;
 import  javax.servlet.http.HttpServletResponse;

 import  org.apache.struts.action.Action;
 import  org.apache.struts.action.ActionForm;
 import  org.apache.struts.action.ActionForward;
 import  org.apache.struts.action.ActionMapping;
 import  org.displaytag.properties.SortOrderEnum;

 import  actionforms.DataActionForm;

 import  com.mnosinov.displaytag.paginatedlistdemo.ExternalPaginatedList;

 import  example.PagedData;

 public   class  ShowDataAction  extends  Action {
   @Override
    public  ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest req,
         HttpServletResponse res)  throws  Exception {
      DataActionForm dataActionForm = (DataActionForm) form;
       if (dataActionForm.getData() ==  null ) {
         HashMap columnNames =  new  HashMap();
         columnNames.put("data1",  1 );
         columnNames.put("data2",  2 );
         columnNames.put("data3",  3 );
         ExternalPaginatedList data =  new  ExternalPaginatedList(( new  PagedData()).getData(), columnNames);
         data.setObjectsPerPage( 4 );
         data.setPageNumber( 1 );
         data.setSearchId("data");
         data.setSortCriterion("data2");
         data.setSortDirection(SortOrderEnum.ASCENDING);

         dataActionForm.setData(data);
      }
       return  mapping.findForward("success");
   }
}

...
Рейтинг: 0 / 0
displaytag - восстановление прежнего состояния таблицы
    #34599279
whoneedshelp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
еще немного пришлось переписать ActionForm для того чтобы можно было get параметры displaytag сохранять в сессии:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
 package  actionforms;

 import  org.apache.struts.action.ActionForm;
 import  org.displaytag.properties.SortOrderEnum;

 import  com.mnosinov.displaytag.paginatedlistdemo.ExternalPaginatedList;

 public   class  DataActionForm  extends  ActionForm {
    private  ExternalPaginatedList data;
    private  String sort;
    private  String dir;
    private   int  page;

    public  ExternalPaginatedList getData() {
       return  data;
   }

    public   void  setData(ExternalPaginatedList data) {
       this .data = data;
   }

    public  String getDir() {
       return  dir;
   }

    public   void  setDir(String dir) {
       this .dir = dir;
      SortOrderEnum orderDir = "desc".equals(dir) ?SortOrderEnum.DESCENDING: SortOrderEnum.ASCENDING;

      data.setSortDirection(orderDir);
   }

    public   int  getPage() {
       return  page;
   }

    public   void  setPage( int  page) {
       this .page = page;
      data.setPageNumber(page);
   }

    public  String getSort() {
       return  sort;
   }

    public   void  setSort(String sort) {
       this .sort = sort;
      data.setSortCriterion(sort);
   }

}

...
Рейтинг: 0 / 0
displaytag - восстановление прежнего состояния таблицы
    #34599282
whoneedshelp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в jsp странице оставил все по прежнему. Конечно решение может быть не очень отточенное - но я думаю всем кто сталкивался с этой проблемой - этот пример будет хорошим подспорьем - ну а дальше - дело кодинга :)
...
Рейтинг: 0 / 0
displaytag - восстановление прежнего состояния таблицы
    #34599283
whoneedshelp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
сейчас собираюсь сесть и неспеша отточить код - сделать пример более понятным - и для себя и для тех кому это пригодиться
...
Рейтинг: 0 / 0
displaytag - восстановление прежнего состояния таблицы
    #34702530
yurbar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
привет
...
Рейтинг: 0 / 0
displaytag - восстановление прежнего состояния таблицы
    #34702532
yurbar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Привет.

Вопрос есть. Как ты вытягиваешь pageNumber s JSP?
...
Рейтинг: 0 / 0
displaytag - восстановление прежнего состояния таблицы
    #34703460
whoneedshelp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
yurbarПривет.

Вопрос есть. Как ты вытягиваешь pageNumber s JSP?

свойство pageNumber устанавливается и считывается механизмом reflection в библиотеке displaytag - я просто создав свой класс paginatedList создал внешний контейнер для хранения данных о состоянии displaytag таблицы - если ты посмотришь в параметры страницы в адресной строке - ты все их увидишь - например

http://localhost:8080/cms1/ShowCategories.do?sort=name&dir=desc&page=4

где page - это и есть pageNumber
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
displaytag - восстановление прежнего состояния таблицы
    #36000744
Николаха
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
whoneedshelp,

Йёёёёуууу, подскажите как обеспечить вывод без переноса по символам. Я вывожу число в формате
Код: plaintext
1.
format="{0,number,#,##0.00} р"

всё выводится, всё нормально, но он переносит его по словам:
автор
-
1 000 000.00
р

например..... может там есть какая-то возможность???
...
Рейтинг: 0 / 0
displaytag - восстановление прежнего состояния таблицы
    #36001389
Leshij
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Николаха пишет:
> whoneedshelp,
>
> Йёёёёуууу, подскажите как обеспечить вывод без переноса по символам. Я
> вывожу число в формате
>
> format="{0,number,#,##0.00} р"
>
>
> всё выводится, всё нормально, но он переносит его по словам:
> автор
>
> -
> 1 000 000.00
> р
format="{0,number,#,##0.00}&nbsp;р"
?
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
displaytag - восстановление прежнего состояния таблицы
    #36003200
Николаха
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Leshij
Николаха пишет:
> whoneedshelp,
>
> Йёёёёуууу, подскажите как обеспечить вывод без переноса по символам. Я
> вывожу число в формате
>
> format="{0,number,#,##0.00} р"
>
>
> всё выводится, всё нормально, но он переносит его по словам:
> автор
>
> -
> 1 000 000.00
> р
format="{0,number,#,##0.00} р"
?


Если это вопрос, то тогда НЕТ у меня там не  . поставил---помогло. Но "минус" по-прежнему на другой строке:
автор
-
1 000 000,00 р


Что означает {0,number,#,##0.00} запись!? как я понял последний параметр это вывод с 2 знаками после запятой и ##0 - группировка по 3 символа с урезыванием впереди нолей, т.е. если надо вывести 0, то будет выведено 0,00.
...
Рейтинг: 0 / 0
displaytag - восстановление прежнего состояния таблицы
    #36003910
Leshij
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот, нашел.
CSS white-space:nowrap
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
displaytag - восстановление прежнего состояния таблицы
    #36014725
Николаха
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Leshij
Вот, нашел.
CSS white-space:nowrap


Спасибо!!! Пришлось поковырять CSS displaytag'ов!!!
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
displaytag - восстановление прежнего состояния таблицы
    #37712080
qi_ip
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Не подкините простой пример с использованием PaginatedList. Типа с sqlmap.queryForList().
Не совсем понял как чего...если не трудно! Спасибо!
...
Рейтинг: 0 / 0
18 сообщений из 18, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / displaytag - восстановление прежнего состояния таблицы
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]