【问题标题】:How to prevent sitemesh from parsing html in textarea如何防止sitemesh在textarea中解析html
【发布时间】:2011-01-24 15:20:06
【问题描述】:

我在我的网络应用中使用 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 的内容有什么想法吗?

【问题讨论】:

标签: java sitemesh


【解决方案1】:

您不能将&lt;tags&gt; 放在文本区域内。这是完全无效的。 Textarea 元素不是像 &lt;script&gt;&lt;style&gt; 这样的“CDATA 元素”,您在其中放入的任何 &lt; 都是真正的标记,而不是字符串文字。

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

<textarea name="page_content">
    &lt;html>
        ...
    &lt;/html>
</textarea>

【讨论】:

    【解决方案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));
    
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2011-03-02
      • 2010-09-21
      • 1970-01-01
      • 2012-01-21
      • 2011-09-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多