2011-05-02 95 views
1

如何呈現HTML標記之類的JSF標記?如何從HTML中的字符串字段在HTML頁面上呈現JSF標記

比如我有一個字符串領域的一些HTML代碼:

<pre>String code = "example <br/> example";</pre> 

如果我使用

<pre><h:outputText value="#{bean.code}" escape="false"/></pre> 

我會得到

<pre>example 
example</pre> 

現在我想渲染JSF組件以同樣的方式。例如:

<pre>String code = '<h:button value="something" action="something"/>';</pre> 

但它會呈現原樣。正如我認爲它必須首先由JSF servlet轉換爲html標籤。我怎樣才能以這種方式呈現JSF控件?我已經獲得了包含大量存儲在數據庫中的JSF控件(文章)的文本,並且我需要從中輕鬆呈現JSF控件。

+0

一個非常糟糕的主意。你爲什麼需要這個?爲什麼不使用Facelet模板或複合組件? – BalusC 2011-05-02 16:47:42

+0

我正在將文章(例如博客)存儲在數據庫列(例如articleText)中。我無法將其存儲在文件中,因爲我無法將新文件添加到正在運行的應用程序中(我正在使用Google App Engine)。所有標籤都存儲在數據庫字段中。我將它作爲添加到html頁面。 – TmCont 2011-05-02 16:51:58

回答

0

這是一個非常糟糕的主意。 JSF標籤必須放在Facelet文件中,文本必須放在數據庫中。在存儲到數據庫之前,您不應該手動將JSF標記添加到文本中。您應該在顯示來自數據庫的文本時在Facelet文件中執行此操作。這就是MVC的「V」應該如何工作。

如果你真的堅持這樣做(這很容易受到安全攻擊,你必須做大量的驗證,以防止),那麼最好你可以做的是創造一個Facelets的ResourceResolver其獲取數據從DB中將其作爲Facelet文件保存在內存或磁盤中,並將URL返回給它。

+0

問題是由於Google App Engine限制,我無法即時創建新文件。所以我想在數據庫中存儲一些頁面標記。如果沒有,我必須添加新文件並重新部署應用程序到GAE。我會尋找其他方法來做到這一點。謝謝你的答案。 – TmCont 2011-05-02 17:07:03

+0

我不推薦。 GAE不允許這樣做是件好事。你一定需要重新思考/重新設計你的方法。 – BalusC 2011-05-02 17:07:42