【问题标题】:nl2br in JSF2 without violating MVC paradigm?JSF2 中的 nl2br 不违反 MVC 范式?
【发布时间】:2012-11-23 08:56:14
【问题描述】:

我正在尝试找出如何最优雅地将 PHP 的 nl2br() 函数之类的东西集成到使用 JSF2/Spring 完成的当前项目中。我可以在我的模型类中使用return text.replaceAll("\n","<br/>"); 之类的东西轻松创建getter,但这似乎确实将视图相关代码放在不属于它的地方。我对在我的数据库中存储实际的 html 内容有同样的感觉。 我想最干净的解决方案是为此使用标签/EL,但是我找不到似乎可以做到这一点的东西。你们将如何实施这样的事情?提前感谢您,任何提示都非常感谢!

【问题讨论】:

    标签: model-view-controller jsf-2 nl2br


    【解决方案1】:

    使用任一 CSS,假设文本不包含任何 HTML

    <div style="white-space: pre">#{bean.text}</div>
    

    或create a custom EL function,然后以非转义形式显示(Facelets 隐式转义 HTML)

    <div><h:outputText value="#{my:nl2br(bean.text)}" escape="false" /></div>
    

    您应该只确保它是free of XSS。

    【讨论】:

      【解决方案2】:

      首先,JSF 是一个 Web UI 框架。因此,您希望输出给用户的任何内容都将以 HTML 结尾(但 javascript 除外)。所以,我不认为它严重违反了 MVC(如果有的话)。也许你甚至可以推开信封,直接在文本中使用&lt;br/&gt;,而不是替换\n

      在更一般的意义上,如果您的文本中有不同的行/段落,更灵活/标准的解决方案是将您的文本分解为不同的元素并让您的演示逻辑处理它。所以,而不是带有

      的属性
       presentationPage.introductionText=Ipse Lorum ...sum.\nVini vidi vinci.
      

      你会以

      结尾
       presentationPage.introductionText.par1=Ipse Lorum ...sum.
       presentationPage.introductionText.par2=vini vidi vinci.
      

      【讨论】:

      • 感谢您的回答,但是由于后端是纯 Java,我可以生成几乎任何视图格式,而不仅仅是 html。您提出的解决方案几乎就是我所做的,因为它似乎是最干净的方式,但是如果内容应该可以通过前端进行编辑,这不是一个很好的选择......
      • 你应该告诉它是用户生成的内容,我更多的是考虑应用程序的静态内容。对于必须从多个界面访问的用户代码,您必须以某种方式标准化并使“客户端”界面坚持下去; \n 用于分页符与任何其他解决方案一样好,并且更容易理解。
      • 谢谢,因为现在它实际上是静态网站内容,但我想为这类东西提供一个标准概念,也可以用于用户生成的内容或任何可能的内容如果需要,请一起来。但是谢谢你,你肯定帮我澄清了这个话题!干杯
      猜你喜欢
      • 2011-11-29
      • 2012-09-22
      • 1970-01-01
      • 2013-07-08
      • 2012-08-17
      • 2011-01-02
      • 2011-06-02
      • 2011-08-28
      • 1970-01-01
      相关资源
      最近更新 更多