当前位置: 技术问答>java相关
标签库的问题
来源: 互联网 发布时间:2015-11-06
本文导语: 标签定义: listall com.softvan.tld.list.ListAllBodyTag com.softvan.tld.list.ListAllBodyTagExtraInfo JSP items true true 标签的java文件: //ListAllBodyTag.java public class ListAllBodyTag extends BodyTagSupport { private int index=0; private StringB...
标签定义:
listall
com.softvan.tld.list.ListAllBodyTag
com.softvan.tld.list.ListAllBodyTagExtraInfo
JSP
items
true
true
标签的java文件:
//ListAllBodyTag.java
public class ListAllBodyTag extends BodyTagSupport
{
private int index=0;
private StringBuffer buffer = new StringBuffer();
public ListAllBodyTag() { }
public int doStartTag()throws JspTagException
{
System.out.println("index="+index);
setLoopVariables();
return super.EVAL_BODY_TAG;
}
public int doEndTag() throws JspTagException
{
try
{
pageContext.getOut().write(buffer.toString());
}
catch (IOException ex)
{
throw new JspTagException("can't write.");
}
return super.EVAL_PAGE;
}
public int doAfterBody() throws JspTagException
{
BodyContent bodyContent = getBodyContent();
if (bodyContent != null)
{
buffer.append(bodyContent.getString());
try
{
bodyContent.clear();
}
catch (IOException ex)
{
throw new JspTagException("can't clear.");
}
}
if( items.size() > ++index )
{
setLoopVariables();
return super.EVAL_BODY_TAG;
}
return super.SKIP_BODY;
}
private void setLoopVariables()
{
pageContext.setAttribute("name",((Hashtable)items.get(index)).get("name"));
pageContext.setAttribute("value",((Hashtable)items.get(index)).get("value"));
}
private java.util.Vector items;
public java.util.Vector getItems() { return items; }
public void setItems(java.util.Vector items) { this.items = items; }
}
//ListAllBodyTagExtraInfo.java
public class ListAllBodyTagExtraInfo extends TagExtraInfo
{
public ListAllBodyTagExtraInfo() { }
public VariableInfo[] getVariableInfo(TagData data)
{
return new VariableInfo[]
{
new VariableInfo("name", "java.lang.String", true, VariableInfo.NESTED) ,
new VariableInfo("value", "java.lang.Integer", true, VariableInfo.NESTED),
};
}
}
使用标签的jsp文件:
is
但是,运行的时候说array out of 0的错误,请问,该标签以及它的java文件是怎么工作的?谢谢
listall
com.softvan.tld.list.ListAllBodyTag
com.softvan.tld.list.ListAllBodyTagExtraInfo
JSP
items
true
true
标签的java文件:
//ListAllBodyTag.java
public class ListAllBodyTag extends BodyTagSupport
{
private int index=0;
private StringBuffer buffer = new StringBuffer();
public ListAllBodyTag() { }
public int doStartTag()throws JspTagException
{
System.out.println("index="+index);
setLoopVariables();
return super.EVAL_BODY_TAG;
}
public int doEndTag() throws JspTagException
{
try
{
pageContext.getOut().write(buffer.toString());
}
catch (IOException ex)
{
throw new JspTagException("can't write.");
}
return super.EVAL_PAGE;
}
public int doAfterBody() throws JspTagException
{
BodyContent bodyContent = getBodyContent();
if (bodyContent != null)
{
buffer.append(bodyContent.getString());
try
{
bodyContent.clear();
}
catch (IOException ex)
{
throw new JspTagException("can't clear.");
}
}
if( items.size() > ++index )
{
setLoopVariables();
return super.EVAL_BODY_TAG;
}
return super.SKIP_BODY;
}
private void setLoopVariables()
{
pageContext.setAttribute("name",((Hashtable)items.get(index)).get("name"));
pageContext.setAttribute("value",((Hashtable)items.get(index)).get("value"));
}
private java.util.Vector items;
public java.util.Vector getItems() { return items; }
public void setItems(java.util.Vector items) { this.items = items; }
}
//ListAllBodyTagExtraInfo.java
public class ListAllBodyTagExtraInfo extends TagExtraInfo
{
public ListAllBodyTagExtraInfo() { }
public VariableInfo[] getVariableInfo(TagData data)
{
return new VariableInfo[]
{
new VariableInfo("name", "java.lang.String", true, VariableInfo.NESTED) ,
new VariableInfo("value", "java.lang.Integer", true, VariableInfo.NESTED),
};
}
}
使用标签的jsp文件:
但是,运行的时候说array out of 0的错误,请问,该标签以及它的java文件是怎么工作的?谢谢
|
先说明错误的原因
在doStartTag中调用了setLoopVariables,而jsp中传进去的all的size()=0,在setLoopVariables里面items.get(index)就会出错(此时index=0)。
因此doStartTag有逻辑错误,对于传进去一个空vector的情况就会出错,应该改成:
public int doStartTag() throws JspTagException {
System.out.println("index="+index);
if (items==null || items.size()==0) { //判断items为空或者没有元素
return super.SKIP_BODY;
} else {
setLoopVariables();
return super.EVAL_BODY_TAG;
}
}
在doStartTag中调用了setLoopVariables,而jsp中传进去的all的size()=0,在setLoopVariables里面items.get(index)就会出错(此时index=0)。
因此doStartTag有逻辑错误,对于传进去一个空vector的情况就会出错,应该改成:
public int doStartTag() throws JspTagException {
System.out.println("index="+index);
if (items==null || items.size()==0) { //判断items为空或者没有元素
return super.SKIP_BODY;
} else {
setLoopVariables();
return super.EVAL_BODY_TAG;
}
}