欢迎光临
我们一直在努力

外层 tag 向内层 tag 传参数的实现[原创]-JSP教程,资料/其它

建站超值云服务器,限时71元/月

好久没有发文章了,终于又写了一篇,^_^
—————————————–
外层 tag 向内层 tag 传参数的实现

作者: jeru liu
日期: 4th, dec, 2002
e-mail: jeru_liu@hotmail.com

看看以下页面,形式有如
<parenttag name="xxx">
<param name="n1" value="v1"/>
<param name="n1" value="v1"/>
</parenttag>
这段代码实际上由三个tag组成,paranttag调用一次,param tag 调用两次

有几点说明:
首先,parenttag 中要有个集合,用来存放不定个数的参数,我们可以选择 hashtable.
其次,param tag 要用到 tag 基类中定义的 getparent()方法来获取外层 tag 的句柄,然后将参数
put 到 parenttag 的集合中去,这可能是个循环的过程.
再次,parenttag 中 dostarttag 方法要说明它将包含 body
public int dostarttag() throws jspexception{
return eval_body_include;
}
这样才能执行内层 tag

分析完毕,理清思路后,首先写一个接口,规定了所有的外层 tag 都要有集合的操作方法.

public interface paramcollector
{

// for parameters
public abstract void setparams(hashtable p);
public abstract hashtable getparams();

public abstract void setparam(string name, string value);
}

然后写一个中间的过渡类用来做类型转换,同时实现接口paramcollector和tagsupport类(需要getparent方法)
public class parenttag extends tagsupport implements paramcollector {

protected hashtable mparams = new hashtable();
public void setparams(hashtable p) { mparams = p; }
public hashtable getparams() { return mparams; }

public void setparam(string name, string value) {
mparams.put(name, value);
}
}

最后才是我们所需要的外层 tag 来继承过渡类 parenttag,他什么也不用做,
等着 param tag 传参数过来就 ok

public class usepageelement extends parenttag {

private string name;
public void setname(string n) { name = n; }
public string getname() { return name; }

public int dostarttag() throws jspexception{
return eval_body_include;
}

public int doendtag() throws jspexception{

system.out.println("parameter size is " + mparams.size());
//…省去无关代码若干行
return skip_body;
}

}

再看看 param tag 干了些什么
public class paramtag extends tagsupport {

private string mname;
private string mvalue;

public string getname() { return mname; }
public void setname(string name) { mname = name; }

public string getvalue() { return mvalue; }
public void setvalue(string value) { mvalue = value; }

public int doendtag() throws jspexception{
system.out.println("param tag starting now……");
// 类型转换,这里正是我们需要用到过渡类的原因,鱼和熊掌我都要
parenttag pt = (parenttag)getparent();
// 向父 tag 传参数
pt.setparam(mname, mvalue);
return skip_body;
}

}

所有的代码到此结束了,一共4个类,下面看看jsp页面

<usepageelement name="system query">
<param name="jeru" value="haha"/>
<param name="dkt" value="lala"/>
<param name="shark" value="xixi"/>
</usepageelement>

在页面里执行这段代码,后台就可以看到打印参数的结果,显示有三个参数
挺简单的吧

赞(0)
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com 特别注意:本站所有转载文章言论不代表本站观点! 本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。未经允许不得转载:IDC资讯中心 » 外层 tag 向内层 tag 传参数的实现[原创]-JSP教程,资料/其它
分享到: 更多 (0)