Java 如何防止sitemesh在textarea中解析html
我在我的web应用程序中使用sitemesh进行页面装饰 我有一个表单,其中textarea字段的内容是一个完整的html页面 问题是,当Sitemesh解析此页面时,它会从我的textarea字段中提取标题、标题和正文,并用它装饰页面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
<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">
<html>
...
</html>
</textarea>