Как оценить тег JSP, который хранится в строке? - PullRequest
2 голосов
/ 20 сентября 2011

У меня есть класс действий Struts, который устанавливает String с разметкой пользовательского тега JSP в качестве атрибута запроса. Класс действия пересылает это на страницу JSP, которая содержит другой тег, в котором печатается атрибут запроса. Однако пользовательский тег 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 Ответ

2 голосов
/ 20 сентября 2011

, что reconTag должен соответствовать самому исходному коду, а не добавляться в виде вывода String ...

Do Обратите внимание, что JSP выполняет следующие действия:

1 - анализирует документдля тегов.

2 - заполняется выходными данными Java, запрашиваемыми документом.

Поскольку этот вызов выполняется только ПОСЛЕ интерпретации тегов, эти теги обычно выдаются какобычный текст.

Если вы хотите добавить какие-либо динамические теги в ваш документ, вам нужно будет найти способ построения документа с этими тегами на месте, прежде чем его проанализировать ... это однако, может быть огромная головная боль, если не невозможно.

...