【问题标题】:Using OutputRaw in Java Tapestry在 Java Tapestry 中使用 OutputRaw
【发布时间】:2013-08-22 10:08:38
【问题描述】:

我有一个运行 Java Tapestry 的 Web 应用程序,其中包含大量用户输入的内容。用户可以输入的唯一格式是换行符。

我从数据库中调用一个文本字符串,并将其输出到模板中。该字符串包含换行符为 /r,我将其替换为
。但是,这些在输出时会被过滤,因此文本看起来像 b
text text b
text。我想我可以使用 outputRaw 或 writeRaw 来解决这个问题,但我找不到任何有关如何将 outputRaw 或 writeRaw 添加到 Tapestry 类或模板的信息。

班级是:

 public String getText() {
    KMedium textmedium = getTextmedium();
    return (textmedium == null || textmedium.getTextcontent() == null) ? "" : textmedium.getTextcontent().replaceAll("\r", "<br>");
    }

tml 是:

<p class="categorytext" id="${currentCategory.id}">
${getText()}
</p>

我应该在哪里添加原始输出处理以使我的换行符正确显示?

【问题讨论】:

    标签: java html output tapestry


    【解决方案1】:

    回答我自己的问题,这是如何将 $getText() 的结果输出为原始 html:

    从这里更改 tml:

    <p class="categorytext" id="${currentCategory.id}">
    ${getText()}
    </p>
    

    对此:

    <p class="categorytext" id="${currentCategory.id}">
    <t:outputraw value="${getText()}"/>
    </p>
    

    【讨论】:

    • 注意&lt;t:outputraw value="${getText()}" /&gt;最好写成&lt;t:outputraw value="text" /&gt;
    【解决方案2】:

    请注意,这是非常危险的,因为您可能会将您的网站打开到XSS 攻击。您可能需要使用jsoup 或类似方法来清理输入。

    【讨论】:

      【解决方案3】:

      另一种可能是:

      <p class="categorytext" id="${currentCategory.id}">
         <t:loop source="textLines" value="singleLine">
          ${singleLine}  <br/>
         </t:loop>
       </p>
      

      这假定一个getTextLines() 方法返回一个列表或字符串数​​组;它可以使用与 getText() 相同的逻辑,但将结果拆分到 CR。当文本行包含不安全字符(例如&amp;&lt;)时,这会做得更好。再多做一些工作,您可以只在行之间(而不是在每行之后)添加&lt;br&gt;……这感觉它也可能是一个不错的组件。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-08-26
        • 2023-03-09
        • 2011-06-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-07-02
        • 1970-01-01
        相关资源
        最近更新 更多