2

我在我的网络应用程序中使用 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 的内容有任何想法吗?

4

2 回答 2

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));

    }
}
于 2010-03-07T09:29:05.240 回答
1

你不能放在<tags>一个textarea里面。这是完全无效的。Textarea 元素不是像<script>and那样的“CDATA 元素”,您放入其中的<style>任何内容都是真正的标记,而不是字符串文字。<

在实践中,浏览器通常会让你侥幸逃脱(当然,直到你尝试在其中包含另一个文本区域),但你应该写的是:

<textarea name="page_content">
    &lt;html>
        ...
    &lt;/html>
</textarea>
于 2010-03-07T09:37:44.577 回答