----- Original Message -----
Sent: Wednesday, October 24, 2001 6:39
PM
Subject: RE: DBTags Tag library
I
was having this same issue. It seemed to only happen if the query first
returned rows and then I made another call to the same query
(with different input) and it returned zero rows. Looking at
the source for ResultSetTag.java, it seemed to have something to do with the
processing of the end tag. doEndTag() has the following
code:
public int doEndTag() throws
JspTagException{
pageContext.removeAttribute(getId());
try
{
if (getBodyContent() != null &&
getPreviousOut() != null) {
getPreviousOut().write(getBodyContent().getString());
}
} catch (IOException e)
{
throw new
JspTagException(e.toString());
} finally
{
try
{
_rset.close();
}
catch (SQLException e)
{
// it's not fatal if the
result set cannot be closed
e.printStackTrace();
}
}
// we have to call this guy manually
now
// with the spec clarification
release();
return EVAL_PAGE;
}
It
seems the line that writes the body content is writing the content of the SQL
query when no rows are returned. (getPreviousOut().write(getBodyContent().getString());) I
modified the if-block as follows and I no longer have the
problem:
if ( getBodyContent() != null &&
getPreviousOut() != null &&
_shouldLoop ==
true &&
_rowCount >
0
)
{
getPreviousOut().write(getBodyContent().getString());
}
This may not be a perfect fix, but it's working for me. I'm only
using the ResultSet tag for iterating over the result set (the loop attribute
is true).
Steve Mader
Hi,
There is a small problem I saw when using
DBTags library with JRun engine and IIS 5.0 and ODBC database
access.
What is happening: when I use a SELECT which
does not return anything, so it's unsuccesful, the generated webpage
contains also the SELECT statement into it !
Here is a piece of the code:
<sql:statement id="stmt1" conn="conn1">
<sql:query>
SELECT Info_id, Details
FROM Informative
WHERE Type = 1
</sql:query>
<sql:resultSet id="rset1"
>
<LI>
<sql:getColumn
position="2"/><BR>
<%String id =
rset1.getString(1);%>
</LI>
</sql:resultSet>
</sql:statement>
When there are no results, I get a
string:
SELECT Info_id, Details FROM
Informative
WHERE Type = 1
Not very pretty, isn't it ?
I believe, but I may speak foolish
things, that the context's output buffer is flushed only inside a block
where some results are obtained so the case when no results are returned
isn't considered.
A last thing: I used wasEmpty AND/OR
wasNotEmpty with no results in solving the problem. I also observer that is
not happening 100% ! Sometimes, somehow I managed to avoid this situation.
(??)
I do not expect help on this matter ;
maybe only a confirmation that this happens elswere.
For Marius
Scurtescu :
Da-i inainte ca faci o treaba buna ! Ma bucur sa vad nume d'ale
noastre pe aici.
Regards,
Alex