玉兰富文本字段

时间:2016-07-21 16:01:36

标签: java magnolia

我正在考虑将Magnolia中的Rich Text直接输出到前端。我正在定义如下字段:

@TabFactory("Content")
public void contentTab(UiConfig cfg, TabBuilder tab) {
    tab.fields(
            cfg.fields.text("title").label("Title"),
            cfg.fields.richText("subtitle").label("Subtitle")
    );
}

在模板中,当信息保存到JCR中时,它似乎使用HTML实体对数据进行编码:

Title: ${content.title}
Subtitle: ${content.subtitle}

输出(原始来源)......

Title: The Title Field
Subtitle: <p>The Subtitle Field</p>

但是应该输出(原始来源)......

Title: The Title Field
Subtitle: <p>The Subtitle Field</p>

有没有办法阻止Rich Text字段自动编码?

2 个答案:

答案 0 :(得分:1)

解码功能有效: https://documentation.magnolia-cms.com/display/DOCS/cmsfn#cmsfn-DecodeHTML

[#if content.text?has_content]
    ${cmsfn.decode(content).text}
[/#if]

答案 1 :(得分:0)

大多数框架试图摆脱XSS类型的攻击,因此这是一种使用模板的好方法:

Title: ${content.title}
Subtitle: <p>${content.subtitle}</p>

它会阻止用户(或管理员)在客户端上运行magic JS或其他一些错误代码。

回到问题:查看此处的文档https://documentation.magnolia-cms.com/display/DOCS/Component+definition。有一种叫做 escapeHtml 的东西看看吧。 :)

编辑,因为bashaus指出他使用的是网页属性而不是组件。解决方案如下:

[#if content.text?has_content]
    ${cmsfn.decode(content).text}
[/#if]

TL.DR:尝试避免动态内容中的html字符,但该功能可以关闭。