晕,排版有问题代码重发  
 
 
下面是我写的实现分页自定义标签的部分代码。  
我用的是NETBEANS工具。  
当我在JSP页面中加入  <%@  taglib  uri=  "/WEB-INF/tlds/fenye.tld  "prefix=  "page  "%  >  
再在后加入  <page:towTag  maxRows=“7”    >    </page:towTag  >  
NETBEANS报错“Attribute  maxRows  invalid  for  tag  towTag”,我在类中写了  
setMaxRows(int  maxRows),为什么在标签中用maxRows属性会错啊?  
package  tag;  
 
import  java.io.IOException;  
import  java.sql.*;  
import  javax.servlet.ServletRequest;  
import  javax.servlet.jsp.JspContext;  
import  javax.servlet.jsp.PageContext;  
import  javax.servlet.jsp.tagext.*;  
import  javax.servlet.jsp.JspWriter;  
import  javax.servlet.jsp.JspException;  
import  sql.SQL;  
 
 
public  class  towTag  extends  SimpleTagSupport  {  
 
 
private  String  sql;  
private  int  rows;  
private  int  maxRows;  
private  int  countsRows;  
private  int  page;  
int  countsPage;  
private  String  url;  
 
SQL  sql2000;  //SQL  是我自己以前写的一个连接数据库的类;  
ResultSet  rs;  
 
public  towTag(){  
super();  
sql2000=new  SQL();  
}  
 
public  void  doTag()  throws  JspException,  IOException{  
 
JspWriter  out=getJspContext().getOut();  
rs=sql2000.chaXun(sql);  //“sql”  为要查询的目标的条件语句;  
 
try  {                                                                      //获取查询出的结果一个有多少行。  
rs.last();                                                            //    如果查询出的饿行数小于1,则结束标签并在  
countsRows  =rs.getRow();                                //  JSP页面中输出  "没有需要的结果!  "。  
if(countsRows  <1){  
out.print(  "没有需要的结果!  ");  
return;  
}  
}  catch  (SQLException  ex)  {  
ex.printStackTrace();  
}    
 
if(getMaxRows()  <1);                        //  设置每一页能输出的查询结果的最大行数,当输入的  
setMaxRows(1);                                  //    值小于1时,则设置每一页能输出的查询结果的最大行  
                                                             //      数为一  
if(getRows()  <1)  
setRows(1);  
 
countsPage=(countsRows%maxRows==0)?(countsRows/maxRows):(countsRows/maxRows+1);  
//countsPage为一共分了多少页;  
 
JspContext  jsp=  this.getJspContext();  
ServletRequest  request=((PageContext)jsp).getRequest();  
try  {  
page=((Integer)request.getAttribute(  "page  ")).intValue();  
}  catch(Exception  e)  {  
page=1;  
}  
 
 
if(getPage()  <1){  
page=1;  
}  
try  {  
setRows((page-1)*maxRows+1);  
rows=this.getRows();  
if(rows  <1)  
rows=1;  
if(rows  >maxRows)  
rows=maxRows;  
rs.relative(rows);  
}  catch  (SQLException  ex)  {  
ex.printStackTrace();  
}  
 
out.print(  "  <form  action=  "+url+  ",method=post  >  ");  
 
try  {  
 
JspFragment  f=getJspBody();  
if  (f  !=  null)  f.invoke(out);  
 
 
}  catch  (java.io.IOException  ex)  {  
throw  new  JspException(ex.getMessage());  
}  
out.print(  "  <input  type=text  name=page/  >  ");  
out.print(  "  <input  type=submit  value=ok/  >  ");  
out.print(  "  </form  >  ");  
}  
 
public  void  setSql(String  sql)  {  
this.sql  =  sql;  
}  
 
public  void  setRows(int  rows)  {  
this.rows  =  rows;  
}  
 
public  void  setMaxRows(int  maxRows)  {  
this.maxRows  =  maxRows;  
}  
 
 
 
public  String  getSql()  {  
return  sql;  
}  
 
public  int  getRows()  {  
return  rows;  
}  
 
public  int  getMaxRows()  {  
return  maxRows;  
}  
 
 
public  ResultSet  getResultSet(){  
return  rs;  
}  
 
public  int  getPage()  {  
return  page;  
}  
 
public  void  setUrl(String  url)  {  
this.url  =  url;  
}  
}

解决方案 »

  1.   

    需要定义taglib的配置阿,就是一个xml。
    用netbeans可以添加属性的
      

  2.   

    我创见了一个标签库文件“/WEB-INF/tlds/fenye.tld”,并且NETBEANS会在创建标签文件的时候自动把标签的信息写如标签库文件啊!
    下面是我的标签库文件~~~~~~~~应该没错吧!
    <?xml version="1.0" encoding="UTF-8"?>
    <taglib version="2.0" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee web-jsptaglibrary_2_0.xsd">
      <tlib-version>1.0</tlib-version>
      <short-name>fenye</short-name>
      <uri>/WEB-INF/tlds/fenye</uri>
      <!-- A validator verifies that the tags are used correctly at JSP
             translation time. Validator entries look like this: 
          <validator>
              <validator-class>com.mycompany.TagLibValidator</validator-class>
              <init-param>
                 <param-name>parameter</param-name>
                 <param-value>value</param-value>
      </init-param>
          </validator>
       -->
      <!-- A tag library can register Servlet Context event listeners in
            case it needs to react to such events. Listener entries look
            like this: 
         <listener>
             <listener-class>com.mycompany.TagLibListener</listener-class> 
         </listener>
       -->
      <tag>
        <name>OneTag</name>
        <tag-class>tag.OneTag</tag-class>
        <body-content>JSP</body-content>
      </tag>
      <tag>
        <name>towTag</name>
        <tag-class>tag.towTag</tag-class>
        <body-content>scriptless</body-content>
      </tag>
      <tag>
        <name>threeTag</name>
        <tag-class>tag.threeTag</tag-class>
        <body-content>empty</body-content>
      </tag>
    </taglib>