Java 如何防止sitemesh在textarea中解析html

Java 如何防止sitemesh在textarea中解析html,java,sitemesh,Java,Sitemesh,我在我的web应用程序中使用sitemesh进行页面装饰 我有一个表单,其中textarea字段的内容是一个完整的html页面 问题是,当Sitemesh解析此页面时,它会从我的textarea字段中提取标题、标题和正文,并用它装饰页面 <textarea name="page_content"> <!-- tags below should not be parsed by Sitemesh --> <html> <h

我在我的web应用程序中使用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的内容,您有什么想法吗?

我自己解决了这个问题。当您检查HTMLPageParser的源代码时,解决方案是不言而喻的

诀窍是编写一个自定义页面解析器,该解析器使用自己的一组规则添加一个新状态,即完全没有规则:

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

    }
}
公共类CustomPageParser扩展了HTMLPageParser{
@凌驾
受保护的void addUserDefinedRules(状态html,页面生成器页面){
super.addUserDefinedRules(html,第页);
//确保在标记中时,没有其他规则生效。
State textarea=新状态();
addRule(newstateTransitionRule(“textarea”,textarea));
}
}
您不能将
放在文本区域内。这是完全无效的。Textarea元素不是像
那样的“CDATA元素”,您放在它们里面的任何

...
/html>

文本区域内容中可能包含HTML字符实体:。
<textarea name="page_content">
    &lt;html>
        ...
    &lt;/html>
</textarea>