【问题标题】:JSP Tag files: checking for nestingJSP 标记文件:检查嵌套
【发布时间】:2009-03-31 22:00:58
【问题描述】:

我正在使用 JSP 编写一些嵌套的自定义标签。我知道有两种方法可以做到这一点:1)编写扩展 BodyTagSupport 的标签处理程序,2)编写标签文件。

在第一种方法中,代码很难看。而且我找不到合并当前 struts 标记的方法。如果我使用 JspWriter 编写以下内容,我会在最终的 HTML 输出中得到这个字符串,而不是编译后的 JSP 生成的有意义的输出。

 <bean:write name="label">

所以,我转向了第二种方法,我写了标签文件。那么上面的问题就解决了。但是,我在获取标签的父标签时遇到问题,因为我不知道父标签类。如果我编写自己的标签处理程序,我可以执行以下操作,

    ParentTag parent = 
        (ParentTag)findAncestorWithClass(this, ParentTag.class);
      if (parent == null) {
        throw new JspTagException("this tag is outside of its parent tag");
      }

但是因为我使用了标签文件,所以我不太清楚它的父类是什么类。

我该如何解决这个问题?

【问题讨论】:

    标签: jsp jsp-tags


    【解决方案1】:

    好吧,标签文件本身并不是像标签处理程序那样的“类”(我的意思是,显然它是,就像所有 JSP 文件一样,但是,你明白我的意思)。

    当我必须对标签文件进行“嵌套”标签时,我所做的是将我的状态数据以“众所周知的名称”放入请求中。实际上是两个标签之间共享的“秘密”。

    例如在一个标签文件中我可能会这样做:

    <%
    jspContext.setAttribute("_myWellKnownName", new java.util.LinkedHashMap(), PageContext.REQUEST_SCOPE);
    %>
    

    然后,在后面的标签文件中:

    <%
        java.util.LinkedHashMap map = (java.util.LinkedHashMap) jspContext.findAttribute("_myWellKnownName");
    %>
    

    然后我随心所欲地操纵那个变量。

    在父标签中,执行子标签的代码,所以在我的地图(在这种情况下)被填充之后,我可以在那时做任何我需要做的事情。

    我发现的基本模式是将子标签的结果收集到一个列表中,然后在孩子完成所有工作后,父级将实际数据呈现到页面。

    我不需要在我的标签中将父母嵌套在其他父母中(即一个标签将与另一个标签的状态冲突),但显然这可能是一般意义上的这种方法的问题。不过对我的目的仍然有效。

    【讨论】:

      【解决方案2】:

      我傻到忘记了我可以将上面的Java代码插入到JSP中,并在页面上设置一个参数将“父”传递给JSP页面......

      我不确定,如果我应该关闭这个问题。因为答案有点傻。请资深 StackOverflow 用户指教。

      【讨论】:

        【解决方案3】:

        也许this 会有所帮助。

        Michael Breed 2010 年 11 月 9 日凌晨 1:23

        我知道这已经快一岁了 现在,但正如我碰巧正在寻找的那样 我想自己使用标签文件 我会纠正规定的限制 这里。实际上可以注入 多个部分使用什么 JSP 术语 “片段”并使用 jsp:invoke 标签。方法如下:

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2014-07-30
          • 1970-01-01
          • 2022-06-18
          • 2011-02-03
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-11-25
          相关资源
          最近更新 更多