如何评估存储在String中的JSP标记?

时间:2011-09-20 14:43:04

标签: java jsp taglib

我有一个Struts动作类,它将String设置为自定义JSP标记的标记作为请求属性。 action类将它转发到JSP页面,该页面包含另一个标签,其中打印了request属性。但是,不会解析自定义JSP标记并将其显示为纯文本。以下显示了JSP如何呈现它:

<%@ taglib uri="/tld/CdrReconTags.tld" prefix="reconTags" %>

 <reconTags:renderHTML>
  <form id=F_3_2>

    <table align='center' width='100%' style='border:1px solid black;'  cellpadding='0' cellspacing='0'>
      <tr>
        <td colspan='2'>&nbsp;</td>
      </tr>
      <tr>
        <td align='center'>
          <div class='label'>
            <strong style='white-space: nowrap;'>STARTDATE :&nbsp;</strong>
          </div>
        </td>
        <td>
          <div class='label'>
            <strong style='white-space: nowrap;'>
              <reconTags:reportDatesDropDown id="STARTDATE_3_3" />&nbsp;
              <span style='color:red;font-weight: bold; font-size: 20px;'>*</span>
            </strong>
          </div>
        </td>
        <td align='center'>
          <div class='label'>
            <strong style='white-space: nowrap;'>ENDDATE :&nbsp;</strong>
          </div>
        </td>
        <td>
          <div class='label'>
            <strong style='white-space: nowrap;'>
</reconTags:renderHTML>

请注意未解析的自定义JSP标记<reconTags:reportDatesDropDown id="STARTDATE_3_3" />。我怎样才能让JSP评估它?以下代码是<reconTags:renderHTML>的标记处理程序,并且不评估正文,如上面的输出所示。

public class DynamicHTMLRendererTagHandler extends BodyTagSupport 
{

    private static final long serialVersionUID = 6457283471933854138L;

    public int doStartTag() throws JspException 
    {
        return EVAL_BODY_BUFFERED;
    }

    public int doAfterBody() throws JspException 
    {
       /* Grab the body content */
        BodyContent body = this.getBodyContent();

        try 
        {
            body.writeOut(body.getEnclosingWriter());
        } catch (IOException e) 
        {
              throw new JspTagException(e.toString());      
        }
        return SKIP_BODY;
    }
}

1 个答案:

答案 0 :(得分:2)

reconTag应该是初始代码本身,而不是作为String输出添加...

请注意JSP的作用是:

1 - 解析文档中的标签。

2 - 填满文档请求的Java输出。

由于此调用仅在解释标记后完成,因此这些标记以纯文本形式出现是正常的。

如果你想在你的文档中添加某种动态标记,你必须找到一种方法来在解析之前使用这些标记来构建文档...然而,这可能是一个巨大的头痛,如果不是不可能的话。