JSP标记库使用相同的对象

时间:2012-04-12 16:15:13

标签: java class jsp taglib

如何让我自己的标签使用相同的资源(例如xml doc)?

伪代码:

JSP:

<readxml:getuser/>
<readxml:getpassword/>

爪哇:

public class getpassword(or getuser) extends BodyTagSupport
{
   if(doc)
   {
      out.println(doc)
   }
   else
   {
      doc = builder.build(file)
      out.println(doc)
   }
}

这甚至可能吗?

2 个答案:

答案 0 :(得分:2)

您可以在当前请求的上下文中存储临时数据:

public class getpassword(or getuser) extends BodyTagSupport
{
   public int doEndTag() {
      Doc doc = pageContext.getRequest().getAttribute("doc");
      if(doc == null)
      {
         pageContext.getRequest().setAttribute("doc", doc = builder.build(file));
      }
      out.println(doc);
       ...
   }
}

您还可以将其存储到会话或静态变量中(取决于您想要的范围)。

答案 1 :(得分:0)

从公共类扩展自定义标记,并将XML加载延迟到它。由于您希望避免重复解析文档,因此需要将文档变量本身设置为静态。

除了将文档加载和存储功能放在公共类中之外,您可以选择在所有相关标记(支持类)中引用的独立实用程序类中实现它。