2012-11-23 18 views
0

我想弄清楚如何最優雅地將PHP的nl2br()函數整合到使用JSF2/Spring完成的當前項目中。我可以很容易地在我的模型類中使用類似return text.replaceAll("\n","<br/>");的方式創建getter,但是這看起來好像將與視圖相關的代碼放在不屬於它的地方。我對於在我的數據庫中存儲實際的html內容有同樣的感覺。 我想最乾淨的解決方案將使用標籤/ EL爲此,但我找不到似乎這樣做的東西。你們會如何實現這樣的事情?預先感謝您,任何提示都非常感謝!JSF2中的nl2br沒有違反MVC範式?

回答

1

使用任何CSS結束,假設文本中不包含任何HTML

<div style="white-space: pre">#{bean.text}</div> 

或者create a custom EL function然後顯示它未轉義(Facelets隱式轉義HTML)

<div><h:outputText value="#{my:nl2br(bean.text)}" escape="false" /></div> 

您只應該確保它是free of XSS

+0

完美謝謝! – user871784

1

那麼,首先JSF是一個Web UI框架。所以,你期望輸出給用戶的任何東西都會以HTML結尾(儘管只有javascript的例外)。所以,我不認爲它嚴重違反了MVC(如果有的話)。也許你甚至可以把信封並直接使用<br/>裏面的文字,而不是替換\n

在更普遍的意義上說,如果你在你的文字有不同的行/段落中,更靈活/標準溶液會被打破你不同元素中的文本並讓您的表示邏輯處理它。所以,與其用

presentationPage.introductionText=Ipse Lorum ...sum.\nVini vidi vinci. 

一個屬性您將與

presentationPage.introductionText.par1=Ipse Lorum ...sum. 
presentationPage.introductionText.par2=vini vidi vinci. 
+0

感謝您的回答,但作爲後端是純java,我可以生成幾乎任何視圖格式,不僅html。你提出的解決方案几乎是我所做的,因爲它似乎是最乾淨的方式,但是如果內容應該可以通過前端進行編輯,它不是一個很好的選擇... – user871784

+0

你應該告訴它它是用戶生成的內容,我在想更多的應用程序靜態內容。用戶代碼必須能夠從多個接口訪問,您必須以某種方式進行標準化,並使「客戶端」接口保持不變;分頁符「\ n」與其他任何解決方案一樣好,而且更容易理解。 – SJuan76

+0

謝謝,至於現在它實際上是靜態網站內容,但我想爲這類東西提供類似於標準概念的東西,這些東西也可用於用戶生成的內容或任何可能需要的內容。但是,謝謝你,你肯定幫我澄清了我的話題!乾杯 – user871784