5

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

我从数据库中调用文本字符串,并将其输出到模板中。该字符串包含换行符为 /r,我将其替换为 <br>。但是,这些在输出时会被过滤,因此文本看起来像 b<br>text 文本 b<br> 文本。我想我可以使用 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>

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

4

3 回答 3

4

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

从此更改 tml:

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

对此:

<p class="categorytext" id="${currentCategory.id}">
<t:outputraw value="${getText()}"/>
</p>
于 2013-08-22T10:20:51.813 回答
3

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

于 2013-08-22T10:54:17.890 回答
2

另一种选择可能是:

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

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

于 2013-09-04T18:09:28.720 回答