You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by bu...@apache.org on 2003/02/23 14:36:38 UTC
DO NOT REPLY [Bug 17316] New: -
taglib always returns null in first reocrd with pageContext.setAttribute
DO NOT REPLY TO THIS EMAIL, BUT PLEASE POST YOUR BUG
RELATED COMMENTS THROUGH THE WEB INTERFACE AVAILABLE AT
<http://nagoya.apache.org/bugzilla/show_bug.cgi?id=17316>.
ANY REPLY MADE TO THIS MESSAGE WILL NOT BE COLLECTED AND
INSERTED IN THE BUG DATABASE.
http://nagoya.apache.org/bugzilla/show_bug.cgi?id=17316
taglib always returns null in first reocrd with pageContext.setAttribute
Summary: taglib always returns null in first reocrd with
pageContext.setAttribute
Product: Tomcat 4
Version: 4.1.8
Platform: PC
OS/Version: Windows XP
Status: UNCONFIRMED
Severity: Normal
Priority: Other
Component: Jasper
AssignedTo: tomcat-dev@jakarta.apache.org
ReportedBy: chenhong@iro.umontreal.ca
/*
the codes work well under tomcat 4.0, but in 4.1.18 (I use now), the function
pageContext.setAttribute in the doStartTag always return null to the jsp page.
but the pageContext.setAttribute in the doAfterBody works, so I get the first
record null, and the others well.
*/
// file: Region.java
package ttt;
import javax.servlet.jsp.*;
import javax.servlet.jsp.tagext.*;
public class Region extends BodyTagSupport {
private java.sql.ResultSet rs = null;
public int doStartTag() throws JspException {
int retVal = SKIP_BODY;
try {
DBO db = (DBO) pageContext.findAttribute("db"); //my connection pool
String sql = "select * from region";
this.rs = db.select(sql);
if (this.rs.next()) {
pageContext.setAttribute("id", this.rs.getString("id")); //***
pageContext.setAttribute("name", this.rs.getString("name")); //***
/*
i'd checked the return from the database with:
pageContext.getOut().print("Hello."+this.rs.getString("name"));
it works properly.
*/
retVal = EVAL_BODY_INCLUDE;
}
} catch (java.sql.SQLException ignored) {}
return retVal;
}
public int doAfterBody() throws JspException {
int retVal = SKIP_BODY;
try {
if (this.rs.next()) {
pageContext.setAttribute("id", this.rs.getString("id"));
pageContext.setAttribute("name", this.rs.getString("name"));
retVal = EVAL_BODY_AGAIN;
}
} catch (java.sql.SQLException ignored) {}
return retVal;
}
}
// file RegionEx.java
/*
anothe problem in extrainfo:
Cannot return the type exclude the "String", the following codes can be
complied, but will cause a "can not complie the jsp exception" when i run the
jsp file:
String type = data.getAttributeString("type");
if (type == null) type = "java.lang.Object";
return new VariableInfo[] {
new VariableInfo(data.getAttributeString("id"), type, true,
VariableInfo.NESTED),
new VariableInfo(data.getAttributeString("name"), type, true,
VariableInfo.NESTED)
};
so, have to return "String" for all the data type?
*/
package ttt;
import javax.servlet.jsp.tagext.*;
public class RegionEx extends TagExtraInfo {
public VariableInfo[] getVariableInfo(TagData data) {
return new VariableInfo[] {
new VariableInfo("id", "String", true, VariableInfo.NESTED),
new VariableInfo("name", "String", true, VariableInfo.NESTED),
};
}
}
//the jsp page.
<table>
<ttt:region>
<tr><td><%= name %></td><td><%= id %></td></tr>
</ttt:region>
</table>
// the tld file
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE taglib
PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN"
"http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd">
<taglib>
<tlib-version>1.2</tlib-version>
<jsp-version>1.2</jsp-version>
<short-name>ttt</short-name>
<tag>
<name>region</name>
<tag-class>ttt.Region</tag-class>
<tei-class>ttt.RegionEx</tei-class>
<body-content>JSP</body-content>
</tag>
</taglib>
---------------------------------------------------------------------
To unsubscribe, e-mail: tomcat-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: tomcat-dev-help@jakarta.apache.org