【问题标题】:How to display a line break with outputText?如何使用 outputText 显示换行符?
【发布时间】:2011-03-21 05:19:56
【问题描述】:

我需要使用outputText 渲染一个换行符,以便我可以使用rendered 属性。我试过了

<h:outputText value="<br/>" escape="false" />

但它产生了异常

The value of attribute "value" associated with an element type "null" must not contain the '<' character. 

【问题讨论】:

    标签: jsf jsf-2 line-breaks


    【解决方案1】:

    这在 Facelets 之后确实无效,因为它在 XML 中的语法无效。您需要手动转义 XML 特殊字符,例如 &lt;&gt; 等。

    <h:outputText value="&lt;br/&gt;" escape="false" />
    

    但是,您可以只在模板文本中发出&lt;br/&gt;,而无需&lt;h:outputText&gt;

    <br/>
    

    要有条件地呈现它,请将其包装在例如 &lt;ui:fragment&gt; 中。

    <ui:fragment rendered="#{bean.rendered}"><br /></ui:fragment>
    

    &lt;h:panelGroup&gt; 也是有效的,因为它不会向 HTML 发出任何内容。

    <h:panelGroup rendered="#{bean.rendered}"><br /></h:panelGroup>
    

    【讨论】:

    • 在托管 bean 中动态添加 HtmlOutputText 时,您将如何执行此操作?我试过HtmlOutputText linebreak = new HtmlOutputText(); lineBreak.setValue("&amp;lt;br/&amp;gt;" and "&lt;br/&gt;");(显然不是在同一时间)但都没有成功,他们只是输出输入的文本,而不是中断
    • @Austin:显然你忘记给setEscape(false)打电话了。
    • 确定不需要任何新书? =)
    • 谢谢 BalusC!如果带有换行符的文本来自 EL 表达式,则需要使用 UN 转义的换行符元素。
    【解决方案2】:

    JSF 页面

    <h:outputText value="#{car.crg}" escape="false" style="white-space: pre-wrap;word-wrap: break-word; " />
    

    escape 应该是false 并编写bean Getter 方法如下

     public String getCrg() {
             return crg.replace("<br/>", "&lt;br /&gt;");
            //return crg;
        }
    

    【讨论】:

      【解决方案3】:

      您可以尝试将"&lt;br /&gt;" 放入资源包中,然后从该资源包中获取值。

      【讨论】:

        猜你喜欢
        • 2012-02-20
        • 1970-01-01
        • 2010-11-26
        • 2017-08-14
        • 2013-06-13
        • 2022-01-09
        • 2011-09-26
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多