一个taglib的问题

04-03-09 rubasse

写一个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;
  }
......
<p>

然后在.jsp里写:

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

这样就可以在页面上显示

Hello World!

但是我现在想取道

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

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

zbw
2004-03-09 13:04

1、修改tld文件

<tag>
</tag>
<p>

中加入

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

2、修改taglib类

加上

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

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

rubasse
2004-03-10 09:48

谢谢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;
  }
<p>

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

rubasse
2004-03-10 10:04

感谢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;
  }
<p>

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

zbw
2004-03-10 10:31

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;
}
<p>

理解了吗?

4Go 1 2 3 4 下一页