[ http://jira.codehaus.org/browse/DISPL-14?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
[EMAIL PROTECTED] deleted DISPL-14: ----------------------------------- > Smart Paging > ------------ > > Key: DISPL-14 > URL: http://jira.codehaus.org/browse/DISPL-14 > Project: DisplayTag > Issue Type: Improvement > Reporter: fabrizio giustina > Assignee: fabrizio giustina > > ==== > imported from sf tracker > id 1026408 > submitted by Ivan Markov - ivan_markov > http://sourceforge.net/tracker/index.php?func=detail&group_id=73068&atid=536613&aid=1026408 > > ==== > Smart Paging > ------------ > Smart paging refers to the ability of DT to deal with large lists of data. > The problem with the current DT approach is that: > a) The whole (potentially large) list of data has to be created for the DT > tag, occupying lots of memory. > b) If the list contains 1000s of records, populated with data from a SQL > Server (99% of the cases, I would say), you have huge network traffic between > the webapp and the server. Our code is especially useful for servers like > Oracle & MySQL which have built-in means to return only a subset of DB > cursor's content. > There's one solution + one enhancement on the forums already (issue > #1013526), so why a third one? > We didn't like in the earlier proposal that it deals with intercepting DT's > request and parsing DT's request parameters, which seems a bit hacky. Also, > we avoid the complications of parsing parameters when there is > 1 table tag > on the page. Not to mention that the older proposal does not deal with full > list sorting, or does it? > Instead, we introduced a new interface, DataProvider. It has two methods: > - List getData(int unsortedOffset, int unsortedLength, int recordOffset, int > pageSize, String sortedColumnName, boolean sortOrderAscending); > - int getDataCount(); > The first two parameters unsortedOffset & unsortedLength are only needed for > supporting DT's setOffset()/setLength() features. > In our patch, DataProvider is used as a "callback" into user's code. The user > is supposed to implement the two methods of this interface. > The code in TableTag and its supporting classes is changed in a way that, for > each response where DT is rendered, > a) One call is issued to DataProvider.getDataCount(), which retrieves the > total number of rows in the data set (needed for DT to calculate the number > of pages). > b) One call is issued to DataProvider.getData(), with the current page, page > size & sorting info. > A sample implementation of user-supplied JDBC DataProvider follows, in > pseudocode. Some JDBC exception handling stuff omitted. > <% > request.setAttribute("list", new DataProvider() { > List getData(int unsortedOffset, int unsortedLength, int recordOffset, > int pageSize, String sortedColumnName, boolean sortOrderAscending) { > Connection con = <app-specific way to get connection>; > > PreparedStatement ps = con.prepareStatement("SELECT * FROM MyTable > ORDER BY ? LIMIT ?, ?"): > ps.setString(1, sortedColumnName); > ps.setInt(2, recordOffset); > ps.setInt(3, pageSize); > //etc.. > ResultSet rs = con.execute(); > > return <app-specific way of getting List from ResultSet; Maybe use > RowSet instead of List?>; > } > > int getDataCount() { > Connection con = <app-specific way to get connection>; > PreparedStatement ps = con.prepareStatement("SELECT count(*) > FROM MyTable"): > ResultSet rs = con.execute(); > rs.next(); > return rs.getInt(1); > } > }); > %> > (DataProvider implementation code can be moved to Struts Controller/Action, > depending on the MVC framework used, in order not to polute the JSP code with > Java scriptlets.) > Smart Paging Compatibility > -------------------------- > We tried to change DT's code so that all older code to continue to work. > If user has provided an old-style List containing all the data, DT will > automatically wrap it with a ListDataProvider. > Current DT functionality (full-list sorting, decorations, multiple tables per > page, etc.) is supported, except for these two cases: > a) Full list(not page) sorting by a decorated column - sorting is done > without regarding the decorator. > b) Full list sorting by a column with no "property" attribute (static or > implicit object call via servlet) - no sorting is performed at all. -- This message is automatically generated by JIRA. - If you think it was sent incorrectly contact one of the administrators: http://jira.codehaus.org/secure/Administrators.jspa - For more information on JIRA, see: http://www.atlassian.com/software/jira ------------------------------------------------------------------------- This SF.net email is sponsored by: Splunk Inc. Still grepping through log files to find problems? Stop. Now Search log events and configuration files using AJAX and a browser. Download your FREE copy of Splunk now >> http://get.splunk.com/ _______________________________________________ displaytag-devel mailing list displaytag-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/displaytag-devel