关于自定义标记的属性的疑问
1.在自定义标记中出现的属性,是否必须在处理类定义相应的成员变量,
并定义相应的set,get函数。
2.set,get函数的命名是否遵循:set/get+属性名?
2.处理类实例化时给成员变量赋值,是否按照2.中所说名称选择相应set/get函数给相应成员变量赋值。
3.定义成员变量时,是否变量名必须与属性名相同。如成员变量为paramName,属性为name,可否?
4.成员变量是否可以根据属性经过变换赋值。如以下代码可否?
<mytag:student name= "xiaowang ">
public class studentTag extends TagSupport {
private String paramName;
public void setName(String n){
this.paramName=n+ "AAA ";
}
public String getName(){
return this.paramName;
}
}
------解决方案--------------------1.在自定义标记中出现的属性,是否必须在处理类定义相应的成员变量,
并定义相应的set,get函数。
答:是的 .
2.setter/getter方法的命名遵循:set/get+属性名(属性名首字母大写)
答:没错.
3.处理类正是按照2.的规则选择相应setter/getter方法
答:对.
4.定义成员变量与属性名不必相同.关键是在setter/getter方法中将二者发生关系.
答:变量名最好要跟属性名一样.自定义的Tag类,tld文件的 <attribute> <name> 属性名 </name> 要一样
5.这个类要重写
public int doStartTag() throws
JspException {} 这个方法
例子:
package test.myprj.book.dao;
import java.sql.*;
import javax.servlet.jsp.*;
import javax.servlet.jsp.tagext.*;
import myprj.db.*;
import java.io.*;
public class BookTag extends BodyTagSupport {
//书名
private String name;
//表名
private String tablename;
//书的编号
private String publishcode;
//所传递的值即(编号所传进的值)
private String value;
public BookTag() {
}
/**
* Process the start tag for this instance.
*
* @return EVAL_BODY_INCLUDE if the tag wants to process body, SKIP_BODY
* if it does not want to process it.
* @throws JspException if an error occurred while processing this tag
* @todo Implement this javax.servlet.jsp.tagext.Tag method
*/
public int doStartTag() throws JspException {
JspWriter out = this.pageContext.getOut();
DBConn conn = new DBConn();
String namevalue = null;
String StrSQL = "select " + name + " from " + tablename + " where " +
publishcode + " =? ";
try {
java.sql.PreparedStatement ps = conn.getConn().prepareStatement(
StrSQL);
ps.setString(1, value);
java.sql.ResultSet rs = ps.executeQuery();
rs.next();
namevalue = rs.getString(1);
} catch (
SQLException ex) {
ex.printStackTrace();
}
try {
out.print(namevalue);
} catch (
IOException ex1) {
throw new JspException(ex1);
}
return 0;
}
public String getName() {
return name;
}
public String getPublishcode() {
return publishcode;
}
public String getTablename() {
return tablename;
}
public String getValue() {
return value;