Up until this point, we have simply had a List object available to us under the name "list" in the request scope that has driven the display of the tables shown. We have been setting up that bean with the following scriptlet, but presumably you would be doing something similar in your Action class rather then raw on this jsp page.
<% request.setAttribute( "test", new TestList( 10 ) ); %>
This table is called with the following attributes:
<display:table name="test">
You can also acquire a handle to the list you want to display by specifying not only a bean name, but also a bean property (a getter method), and the table tag will call that property to fetch the list to display.
Actually there are two "flavors" of displaytag: an EL version, which requires j2ee 1.3 and a jsp 1.1 (j2ee 1.2 compatible) version
In the EL version you can obviously use an EL expression, like name="${pageScope.name.property}"
In the non-EL version you can define the "name" attribute using a really similar sintax, just without
the ${}:
You can define the scope of the bean adding one of the following suffix:
You can also access javabean style properties, mapped properties or indexed properties in the bean, also
nested. The syntax for accessing a javabean property is .property . You can read a mapped
property specifying it between () and an indexed property using [].
So the following:
sessionScope.list.value.attribute(name).item[1]is equivalent to:
session.getAttribute("list").getValue().getAttribute("name").getItem(1)The table tag actually supports the following kind of objects:
Displaytag will never support retrieving data from a db directly. Displaytag is here to help you in displaying data, not to retrieve them.
Anyway, there are a couple of easy methods to get records from a db and display them using displaytag:
1) Using jstl:
just use the sql:query tag and pass the result to the table tag in this way
<sql:query var="results">
select * from table
</sql:query>
<display:table name="${results.rows}" />
(or
<display:table name="pageScope.results.rows" />
if not using the EL version)
2) Using dynabeans
see http://jakarta.apache.org/commons/beanutils/api/org/apache/commons/beanutils/RowSetDynaClass.html
<%
Connection con = ...; // just open a connection
Statement stmt = con.createStatement();
ResultSet rs = stmt.executeQuery("SELECT * from table");
RowSetDynaClass resultSet = new RowSetDynaClass(rs, false);
stmt.close();
con.close();
request.setAttribute("results", resultSet);
%>
<display:table name="requestScope.results.rows" />