代码之家  ›  专栏  ›  技术社区  ›  Henrik Barratt Due

如何防止SiteMesh在文本区域中分析HTML

  •  2
  • Henrik Barratt Due  · 技术社区  · 16 年前

    我使用SiteMesh在我的Web应用程序中进行页面装饰。

    我有一个表单,其中文本区域字段的内容是一个完整的HTML页面。

    问题是,当SiteMesh解析此页时,它会从“我的文本区域”字段中提取标题、标题和正文,并用它装饰页面。

    <textarea name="page_content">
        <!-- tags below should not be parsed by Sitemesh -->
        <html>
             <head>...</head>
             <body>...</body>
        </html>
    </textarea>
    

    似乎SiteMesh页面分析器关心的是它已经在页面中看到了这些标记。

    您对如何防止SiteMesh解析文本区域的内容有什么想法吗?

    2 回复  |  直到 16 年前
        1
  •  1
  •   bobince    16 年前

    你不能放 <tags> 在文本区域内。它是完全无效的。textArea元素与cdata元素不同 <script> <style> 任何 < 您放入它们的是真正的标记,而不是字符串文字。

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

    <textarea name="page_content">
        &lt;html>
            ...
        &lt;/html>
    </textarea>
    
        2
  •  2
  •   Henrik Barratt Due    16 年前

    我自己解决了。当您检查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));
    
        }
    }
    
    推荐文章