从自定义标记创建Struts2标记

从自定义标记创建Struts2标记,struts2,jsp-tags,Struts2,Jsp Tags,我正试图从一个自定义标记向我的JSP写入一个Struts2标记。我有下面的代码。这真的是可能的吗,或者JSP生命周期中有什么东西使得这不可能?如果这是不可能的,有没有其他方法来做我想做的事情 while (iterator.hasNext()) { Bulletin bulletin = (Bulletin) iterator.next(); if (bulletin.isApproved()) {

我正试图从一个自定义标记向我的JSP写入一个Struts2标记。我有下面的代码。这真的是可能的吗,或者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>");
            }
        }
while(iterator.hasNext()){
公告=(公告)迭代器.next();
如果(公告.isApproved()){
out.println(“”);
out.println(“”);
out.println(bulletin.getName()+“--”+bulletin.getSubject()
+“”+bulletin.getDate());
out.println(“”);
out.println(“

”); } }
标记作为将JSP转换为servlet的“转换阶段”的一部分进行解析。通过在标记中发出其他标记,您将假定“第二次传递”转换,但这不会发生。所以这从根本上说是个坏主意

相反,我建议只发送等效的HTML(实际上只是一个带有参数的URL,考虑到上面的代码)。假设您的问题不比上面描述的复杂,这似乎是最简单的方法。事实上,即使你能发出标签,我也看不到一个非常令人信服的例子来解释为什么标签会比原始HTML好。JSP标记库应该促进自动化,尽可能减少代码;更少的代码减少了错误,使JSP更易于维护。但你上面的案例并不是一个叫喊“必须使用标签”的案例

或者,如果您真的希望使用上面自定义标记中的标记,或者希望完全消除标记库,那么可以在scriptlet中编写上述Java代码,并在scriptlet代码之间穿插使用其他struts标记。比如说:

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

<%
            }
        }
%>

不,它不可能out.println只允许在html tag.fa中使用