2010-03-07 44 views
2

我在web应用中使用sitemesh进行页面装饰。如何防止在textarea中解析html的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

也许你textarea内容:http://en.wikipedia.org/wiki/List_of_XML_and_HTML_character_entity_references。 – PeterMmm 2010-03-07 09:02:30

回答

1

您:当您检查HTMLPageParser

关键是要编写一个自定义PageParser,增加了一个新的状态与它自己的一套规则的源代码,即没有规则可言的解决方案是不言而喻不能把<tags>放在textarea里面。这是完全无效的。 Textarea元素不是'CDATA元素',如<script><style>,您放入其中的任何<都是真正的标记,而不是字符串文字。

在实践中的浏览器通常会让你逃脱它(直到您尝试包括内部另一个textarea的,当然),但你应该写的是:

<textarea name="page_content"> 
    &lt;html> 
     ... 
    &lt;/html> 
</textarea> 
与HTML字符实体
2

我自己解决了。

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

    } 
}