p;
}
请注意,如果只想输出由 JSP 主体生成的内容,则可以使用 null 参数调用 invoke() 方法。如果不调用 invoke(),则不执行定制标记的 JSP 主体。
在标记执行过程中生成内容
标记处理类可以使用由 JSP 上下文的 getOut() 方法返回的 JspWriter 输出内容:
package jsputils.tags;
import javax.servlet.jsp.JspContext;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.tagext.SimpleTagSupport;
import java.io.IOException;
public class VarTagSupport extends SimpleTagSupport {
protected void write(String str) throws JspException { [Page]
JspContext jspContext = getJspContext();
JspWriter out = jspContext.getOut();
try {
out.write(str);
} catch (IOException x) {
throw new JspException(x);
}
}
}
开发导出变量的定制标记
“使用 JSP 2.0 EL API”介绍了名为 ELUtils 的类的开发,该类的方法在 Java 代码中求解 JSP 表达式。当您要在 JSP 页面外使用 EL时(如在 XML 文件中使用),EL API 将很有帮助。在“使用 JSP 2.0 EL API”中,我们将 ELUtils 的静态方法映射为 EL 函数。这次,我们将构建一个定制标记 (<u:eval>),它调用 ELUtils 的某个 evaluate() 方法。<u:eval> 标记由名为 EvalTag 的类处理,该类为 <u:eval> 的属性实现两个设置方法(setExpr() 和 setType())。属性 expr 和 type 的值被传递给 evaluate() 方法,该方法返回表达式的值。
如果 expr 属性不存在,则 doTag() 方法将调用从 VarTagSupport 类继承的 invokeBody() 方法以取得主体内容(应为表达式)。因此,调用 <u:eval> 标记的 JSP 页面可以将表达式指定为 expr 属性的值或置于 <u:eval>