Index: src/java/org/displaytag/tags/TableTag.java =================================================================== RCS file: /cvsroot/displaytag/displaytag2/src/java/org/displaytag/tags/TableTag.java,v retrieving revision 1.69 diff -u -r1.69 TableTag.java --- src/java/org/displaytag/tags/TableTag.java 23 May 2004 21:42:45 -0000 1.69 +++ src/java/org/displaytag/tags/TableTag.java 26 Jun 2004 16:58:47 -0000 @@ -169,6 +169,11 @@ */ private SortOrderEnum defaultSortOrder; + /** + * Preserve the current Sort and Page in the session? + */ + private boolean preserveSortAndPage; + // -- end tag attributes -- /** @@ -674,11 +679,27 @@ initHref(requestHelper); Integer pageNumberParameter = requestHelper.getIntParameter(encodeParameter(TableTagParameters.PARAMETER_PAGE)); + // Check session for the page + if (preserveSortAndPage && (pageNumberParameter == null)) { + pageNumberParameter = (Integer)pageContext.getSession().getAttribute(encodeParameter(TableTagParameters.PARAMETER_PAGE)); + } this.pageNumber = (pageNumberParameter == null) ? 1 : pageNumberParameter.intValue(); + // Check if we need to save this value to the session + if (preserveSortAndPage) { + pageContext.getSession().setAttribute(encodeParameter(TableTagParameters.PARAMETER_PAGE), new Integer(this.pageNumber)); + } Integer sortColumnParameter = requestHelper.getIntParameter(encodeParameter(TableTagParameters.PARAMETER_SORT)); + // check session for the sort + if (preserveSortAndPage && (sortColumnParameter == null)) { + sortColumnParameter = (Integer)pageContext.getSession().getAttribute(encodeParameter(TableTagParameters.PARAMETER_SORT)); + } int sortColumn = (sortColumnParameter == null) ? this.defaultSortedColumn : sortColumnParameter.intValue(); this.tableModel.setSortedColumnNumber(sortColumn); + // check if we need to save this value to session + if (preserveSortAndPage) { + pageContext.getSession().setAttribute(encodeParameter(TableTagParameters.PARAMETER_SORT), new Integer(sortColumn)); + } // default value boolean finalSortFull = this.properties.getSortFullList(); @@ -693,12 +714,20 @@ SortOrderEnum paramOrder = SortOrderEnum.fromIntegerCode(requestHelper .getIntParameter(encodeParameter(TableTagParameters.PARAMETER_ORDER))); - + // check session for the sort order + if (preserveSortAndPage && (paramOrder == null)) { + paramOrder = SortOrderEnum.fromIntegerCode((Integer)pageContext + .getSession().getAttribute(encodeParameter(TableTagParameters.PARAMETER_ORDER))); + } // if no order parameter is set use default if (paramOrder == null) { paramOrder = this.defaultSortOrder; } + // check if we need to save this to the session + if (preserveSortAndPage && (paramOrder != null)) { + pageContext.getSession().setAttribute(encodeParameter(TableTagParameters.PARAMETER_ORDER), new Integer(paramOrder.getCode())); + } boolean order = SortOrderEnum.DESCENDING != paramOrder; this.tableModel.setSortOrderAscending(order); @@ -706,22 +735,37 @@ // if the behaviour is sort full page we need to go back to page one if sort of order is changed if (finalSortFull && (sortColumn != -1)) { - - // save actual sort to href - this.baseHref.addParameter(encodeParameter(TableTagParameters.PARAMETER_PREVIOUSSORT), sortColumn); - this.baseHref.addParameter(encodeParameter(TableTagParameters.PARAMETER_PREVIOUSORDER), paramOrder); - // read previous sort from request Integer previousSortColumnParameter = requestHelper - .getIntParameter(encodeParameter(TableTagParameters.PARAMETER_SORT)); + .getIntParameter(encodeParameter(TableTagParameters.PARAMETER_PREVIOUSSORT)); + // Check session for previous sort + if (preserveSortAndPage && (previousSortColumnParameter == null)) { + previousSortColumnParameter = (Integer)pageContext.getSession() + .getAttribute(encodeParameter(TableTagParameters.PARAMETER_PREVIOUSSORT)); + } this.previousSortedColumn = (previousSortColumnParameter == null) ? -1 : previousSortColumnParameter .intValue(); SortOrderEnum previousParamOrder = SortOrderEnum.fromIntegerCode(requestHelper .getIntParameter(encodeParameter(TableTagParameters.PARAMETER_PREVIOUSORDER))); - + // check session for previous order + if (preserveSortAndPage && (previousParamOrder == null)) { + previousParamOrder = SortOrderEnum.fromIntegerCode((Integer)pageContext + .getSession().getAttribute(encodeParameter(TableTagParameters.PARAMETER_PREVIOUSORDER))); + } this.previousOrder = SortOrderEnum.DESCENDING != previousParamOrder; + // save actual sort to href + this.baseHref.addParameter(encodeParameter(TableTagParameters.PARAMETER_PREVIOUSSORT), sortColumn); + this.baseHref.addParameter(encodeParameter(TableTagParameters.PARAMETER_PREVIOUSORDER), paramOrder); + // and save to session if necessary + if (preserveSortAndPage) { + pageContext.getSession().setAttribute(encodeParameter(TableTagParameters.PARAMETER_PREVIOUSSORT), new Integer(sortColumn)); + if (previousParamOrder != null) { + pageContext.getSession().setAttribute(encodeParameter(TableTagParameters + .PARAMETER_PREVIOUSORDER), new Integer(previousParamOrder.getCode())); + } + } } Integer exportTypeParameter = requestHelper @@ -1634,5 +1678,14 @@ return this.paramEncoder.encodeParameterName(parameterName); } + + + /** + * Sets the boolean value for Preserving the Sort and Page in the session + * @param b boolean true or false + */ + public void setPreserveSortAndPage(boolean b) { + preserveSortAndPage = b; + } } \ No newline at end of file Index: src/java/org/displaytag/tags/TableTagBeanInfo.java =================================================================== RCS file: /cvsroot/displaytag/displaytag2/src/java/org/displaytag/tags/TableTagBeanInfo.java,v retrieving revision 1.5 diff -u -r1.5 TableTagBeanInfo.java --- src/java/org/displaytag/tags/TableTagBeanInfo.java 22 May 2004 17:39:35 -0000 1.5 +++ src/java/org/displaytag/tags/TableTagBeanInfo.java 26 Jun 2004 16:58:47 -0000 @@ -37,11 +37,13 @@ proplist.add(new PropertyDescriptor("length", TableTag.class, null, "setLength")); proplist.add(new PropertyDescriptor("offset", TableTag.class, null, "setOffset")); proplist.add(new PropertyDescriptor("pagesize", TableTag.class, null, "setPagesize")); + proplist.add(new PropertyDescriptor("preserveSortAndPage", TableTag.class, null, "setPreserveSortAndPage")); proplist.add(new PropertyDescriptor("requestURI", TableTag.class, null, "setRequestURI")); proplist.add(new PropertyDescriptor("rules", TableTag.class, null, "setRules")); proplist.add(new PropertyDescriptor("sort", TableTag.class, null, "setSort")); proplist.add(new PropertyDescriptor("style", TableTag.class, null, "setStyle")); proplist.add(new PropertyDescriptor("summary", TableTag.class, null, "setSummary")); + // can't be evaluated proplist.add(new PropertyDescriptor("id", TableTag.class, null, "setId")); Index: src/java/org/displaytag/tags/el/ELTableTagBeanInfo.java =================================================================== RCS file: /cvsroot/displaytag/displaytag2/src/java/org/displaytag/tags/el/ELTableTagBeanInfo.java,v retrieving revision 1.2 diff -u -r1.2 ELTableTagBeanInfo.java --- src/java/org/displaytag/tags/el/ELTableTagBeanInfo.java 25 Apr 2004 08:39:15 -0000 1.2 +++ src/java/org/displaytag/tags/el/ELTableTagBeanInfo.java 26 Jun 2004 16:58:48 -0000 @@ -40,6 +40,7 @@ proplist.add(new PropertyDescriptor("name", ELTableTag.class, null, "setName")); proplist.add(new PropertyDescriptor("offset", ELTableTag.class, null, "setOffset")); proplist.add(new PropertyDescriptor("pagesize", ELTableTag.class, null, "setPagesize")); + proplist.add(new PropertyDescriptor("preserveSortAndPage", ELTableTag.class, null, "setPreserveSortAndPage")); proplist.add(new PropertyDescriptor("requestURI", ELTableTag.class, null, "setRequestURI")); proplist.add(new PropertyDescriptor("rules", ELTableTag.class, null, "setRules")); proplist.add(new PropertyDescriptor("sort", ELTableTag.class, null, "setSort"));