Displaying Database Data over Multiple Pages

When you display a database query result based on user-provided search criteria, such as the Employee Search form in Example 12-3, you run the risk of ending up with more rows than you like to show on one page. If the amount of data is large, you may even want to set an upper limit for how many rows can ever be returned by a query. The JSTL actions let you control these things with a few attributes and a configuration setting I haven’t described yet.

Setting an upper limit for the result size

To guard against run-away queries, you can set a context parameter in the deployment descriptor to limit the number of rows returned by any JSTL <sql:query> action in an application:

<web-app>
  ...
  <context-param>
    <param-name>
      javax.servlet.jsp.jstl.sql.maxRows
    </param-name>
    <param-value>
      100
    </param-value>
  </context-param>
  ...
</web-app>

The javax.servlet.jsp.jstl.sql.maxRows parameter value sets the maximum number of rows any <sql:query> action in the application ever adds to the result. You can override this value for an individual action with the maxRows attribute. If you want the action to return all matching rows, set it to -1. There’s also a Result bean property you can use to inform the user that the query returned more rows than permitted by maxRows, named limitedByMaxRows:

<sql:query var="result" maxRows="500"" sql="SELECT * FROM Employee" /> <c:if test="${result.limitedByMaxRows}"> Sorry, but we cannot show you all matches. Only the first 500 ...

Get JavaServer Pages, 3rd Edition now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.