一个taglib的问题

写一个taglib的类


.....
public int doStartTag() throws javax.servlet.jsp.JspTagException{
try{
javax.servlet.jsp.JspWriter jw = pageContext.getOut();
jw.write("Hello World!");
}catch(Exception e){
throw new JspTagException(
"Test: " + e.getMessage());
}

return SKIP_BODY;
}
......

然后在.jsp里写:


<%@ page contentType="text/html;charset=GBK"%>
<%@ taglib uri=
"/WEB-INF/ep.tld" prefix="ep" %>
<ep:area direction=
"hor" name="rootarea"></ep:area>

这样就可以在页面上显示
Hello World!

但是我现在想取道
<ep:area direction="hor" name="rootarea"></ep:area>中的“direction”和“name”的值“hor”和“rootarea”,不知道在类里怎么和.jsp通讯,怎么取到jsp里的值。

请各位高手帮个忙。谢谢!

1、修改tld文件


<tag>
</tag>

中加入

<attribute>
<name>direction</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
<attribute>
<name>name</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
</attribute>

2、修改taglib类
加上


private String name="";
private String direction=
"";
public void setName(String nm){
// autocall!
name=nm;
}
public void setDirection(String nm){
// autocall!
direction=nm;
}

3、在doStartTag中用到这两个变量就可以了

谢谢zbw,
我的tld文件已经是像你所说的了,在taglib类里也有属性变量对应的set、get方法。
现在问题是我在doStartTag()里怎么取道属性变量。
应为doStartTag(),没有入参。也就是说:
setName(String nm)里的nm怎么来的。
我试过这样:


public int doEndTag() throws javax.servlet.jsp.JspException{
try{
javax.servlet.jsp.JspWriter jw = pageContext.getOut();
HttpServletRequest req = (HttpServletRequest)pageContext.getRequest();
String aa = req.getParameter("name");
jw.write(
"Hello World!");
jw.write(
"name:" + aa);
}catch(Exception e){
throw new JspTagException(
"Test: " + e.getMessage());
}
return EVAL_PAGE;
}

但是在页面上显示name的值为null,请问该如何写。

感谢zbw 。
你所说的tld文件,和taglib操作类我都像你所说的。
但是就是不知道怎么在doStartTag()怎么调用,
如果执行setDirection(String nm),那么如何得到nm呢?
我试着这么写:


public int doEndTag() throws javax.servlet.jsp.JspException{
try{
javax.servlet.jsp.JspWriter jw = pageContext.getOut();
HttpServletRequest req = (HttpServletRequest)pageContext.getRequest();
String aa = req.getParameter("name");
jw.write(
"Hello World!");
jw.write(
"name:" + aa);
}catch(Exception e){
throw new JspTagException(
"Test: " + e.getMessage());
}
return EVAL_PAGE;
}

但是页面显示值为null。不知如何写,如何在doEndTag() 怎么取到放进setDirection(String nm)方法的参数。谢谢指教!!!

2、修改taglib类
加上


private String name=""; //在类里加上两个属性,都是private的。
private String direction=
""; //在类里加上两个属性,都是private的。
public void setName(String nm){
// autocall!//这两个set开头的函数,是由jsp容器自动调用的
name=nm;
}
public void setDirection(String nm){
// autocall!//这两个set开头的函数,是由jsp容器自动调用的
direction=nm;
}

理解了吗?

谢谢,zbw ,我知道了。感谢
我还有另外一个问题,请看两段代码:
代码一:


<%@ page contentType="text/html;charset=GBK"%><%@ taglib uri="/WEB-INF/ep.tld" prefix="ep" %>
<ep:area direction=
"hor" name="rootarea"></ep:area>
<ep:area direction=
"hor" name="firstarea"></ep:area> <ep:area direction="ver" name="1001"/></ep:area> <ep:area direction="ver" name="1002"/></ep:area>

代码二:


<%@ page contentType="text/html;charset=GBK"%><%@ taglib uri="/WEB-INF/ep.tld" prefix="ep" %>
<ep:area direction=
"hor" name="rootarea">
<ep:area direction=
"hor" name="firstarea">
<ep:area direction=
"ver" name="1001"/></ep:area>
<ep:area direction=
"ver" name="1002"/></ep:area>
</ep:area>
</ep:area>

代码二是嵌套的,但是这样写,我遇到两个问题。
一是:
如果<ep:area direction="hor" name="firstarea"></ep:area>,这样就通过编译。
如果写成:
<ep:area direction="hor" name="firstarea">
</ep:area>
这样就出错了。如果不能实现这样,就不能实现代码二中的嵌套,也是我要说的第二个问题。

二是:
从代码二中看到是个嵌套的过程。请问怎样知道
<ep:area direction="××" name="×××">下有没有嵌套,如果有怎么解析他。我对写taglib不熟悉,而现在却要做这样的东西。真是麻烦各位,谢谢大家。

我这里有一个人家用ppt做的taglib的讲义,你留个email,我发给你。

再接下去,就需要直接看taglib的教程了。

谢谢,zbw 。
我的mail:becky23@21cn.com
我不是用apache的taglib,而是自己写的taglib,你说的教材是不是指apache的taglib的api和例子?

不是的,你看看吧

zbw ,能不能介绍一些关于taglib的好得教材,或者帮助文档的东西。

zbw,谢谢你的答复。
有没有更好,更容易懂的资料。
我还是不知道如何解决这个嵌套的问题:
<%@ page contentType="text/html;charset=GBK"%>
<%@ taglib uri="/WEB-INF/ep.tld" prefix="ep" %>
<ep:area direction="hor" name="rootarea">
<ep:area direction="hor" name="firstarea">
<ep:area direction="ver" name="1001"/></ep:area>
<ep:area direction="ver" name="1002"/></ep:area>
</ep:area>
</ep:area>
当我getName()时,那我怎么知道它是属于那个<ep:area></ep:area>里,
我想实现的是像html里得<table></table>那样,有嵌套的.
你以前有没有做过这样得东西,或者例子?

我以前从来没有写过taglib的程序。
告诉你的这些,也是我在网上下载了那个ppt之后,才学会的。

等我自己编一编看吧,有结果再告诉你。

谢谢zbw,
等候你的佳音哦!

我买了一本书《The J2EE Tutorial 中文版》,是中国铁道出版社出版的。其中的第13章,JSP页面中的定制标签,就比较详细的介绍了TagLib技术。

你也可以上网下载j2ee1.4的教程,里面的第15章,是介绍taglib的。

教程下载

我最近在忙一个项目,如果你不急,可以等我写出学习笔记,如果急的话,可以买书,或者下载来看。