【问题标题】:Creating a Struts2 tag from a custom tag从自定义标签创建 Struts2 标签
【发布时间】:2011-07-08 11:32:33
【问题描述】:

我正在尝试将 Struts2 标记从自定义标记写入我的 JSP。我有下面的代码。这实际上是可能的,还是 JSP 生命周期中的某些东西使这变得不可能?如果不可能,还有其他方法可以做我想做的事情吗?

        while (iterator.hasNext()) {
            Bulletin bulletin = (Bulletin) iterator.next();
            if (bulletin.isApproved()) {
                out.println("<s:url value=\"GetSingleBulletin\">");
                out.println("<s:param name=\"id\" " 
                        + "value=\"%{" + bulletin.getId()+ "}\" />");
                out.println(bulletin.getName() + " -- " + bulletin.getSubject() 
                        + " " + bulletin.getDate());
                out.println("</s:url>");
                out.println("<br><br>");
            }
        }

【问题讨论】:

    标签: struts2 jsp-tags


    【解决方案1】:

    不可能 out.println 只允许在 html tag.fa 中

    【讨论】:

      【解决方案2】:

      标签作为将 JSP 转换为 servlet 的“翻译阶段”的一部分进行解析。通过在您的标签中发出其他标签,您假设“第二次通过”翻译,这不会发生。所以这基本上是一个坏主意。

      相反,我建议只发出等效的 HTML(实际上只是一个带有参数的 URL,给定您上面的代码)。假设您的问题并不比您上面描述的更复杂,这似乎是最简单的方法。事实上,即使你可以发出标签,我也没有看到一个非常有说服力的案例来说明为什么标签无论如何都会比原始 HTML 更好。 JSP 标签库应该尽可能地促进自动化和更少的代码;更少的代码可以减少错误并使 JSP 更易于维护。但是您上面的案例并不是在大声疾呼“必须使用标签”。

      或者,如果您真的更喜欢使用上面自定义标签中的标签,或者您愿意完全消除您的 taglib,您可以将上面的 Java 代码编写在一个 scriptlet 中,并穿插使用其他的该 scriptlet 代码之间的 struts 标记。所以,类似:

      <%
              while (iterator.hasNext()) {
                  Bulletin bulletin = (Bulletin) iterator.next();
                  if (bulletin.isApproved()) {
      %>
                      <s:url value="GetSingleBulletin">
      etc.
      
      <%
                  }
              }
      %>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-02-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-02-09
        • 2015-03-12
        • 1970-01-01
        相关资源
        最近更新 更多