2010-03-07 46 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)); 

    } 
}