我在网络应用中使用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的内容有任何想法吗?
答案 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">
<html>
...
</html>
</textarea>