如何防止sitemesh解析textarea中的html

时间:2010-03-07 08:52:28

标签: java sitemesh

我在网络应用中使用sitemesh进行页面装饰。

我有一个表单,其中textarea字段的内容是一个完整的html页面。

问题在于,当Sitemesh解析此页面时,它会从我的textarea字段中提取标题,头部和正文,并使用它来装饰页面。

<textarea name="page_content">
    <!-- tags below should not be parsed by Sitemesh -->
    <html>
         <head>...</head>
         <body>...</body>
    </html>
</textarea>

Sitemesh页面解析器似乎确实已经在页面中看到了这些标记。

您对如何防止Sitemesh解析textarea的内容有任何想法吗?

2 个答案:

答案 0 :(得分:2)

我自己解决了。当您检查HTMLPageParser的源代码

时,解决方案是不言而喻的

诀窍是编写一个自定义PageParser,它添加一个具有自己的规则集的新状态,即根本没有规则:

public class CustomPageParser extends HTMLPageParser {

    @Override
    protected void addUserDefinedRules(State html, PageBuilder page) {
        super.addUserDefinedRules(html, page);
        // Ensure that while in <textarea> tag, none of the other rules kick in.
        State textarea = new State();
        html.addRule(new StateTransitionRule("textarea", textarea));

    }
}

答案 1 :(得分:1)

您无法将<tags>放入textarea中。它完全无效。 Textarea元素不是像<script><style>那样的“CDATA元素”,您放入其中的任何<都是真正的标记,而不是字符串文字。

在实践中,浏览器通常会让你逃脱它(当然,直到你试图在里面包含另一个textarea),但你应该写的是:

<textarea name="page_content">
    &lt;html>
        ...
    &lt;/html>
</textarea>