2015-09-24 130 views
1

讓我解釋一下我的需求。目前我們正在使用具有一些html代碼和Scala屬性的Scala模板。如何在Scala模板中將Scala變量注入html屬性(字符串)HTML

test.scala.html

@(hostName: String, token: String, protocol: String, supportEmail: String) 
@import helper._ 
<!DOCTYPE html> 

<html> 
<head> 
    <title></title>  
</head> 
<table> 
<tr> 
      <td>&nbsp;</td> 
      <td style="color: #626262;">     
       <p style="font-size:14px;"> 
        <br/> 
        Our app will let you access your company intranet.<br/><br/> 
        Your activation code is <b>@token</b><br/><br/> 

        If you have any questions, please contact our <a href="mailto:@supportEmail">support team</a> anytime. 
        <br/><br/> 
        Best regards,<br/> 
         The Support Team 
        </p> 
       </td> 
      </tr> 
     </table> 
    </body> 

如果你看到上面的代碼@token@supportEmail是動態的,我們傳遞給斯卡拉。

直到現在看起來不錯。需求發生變化,客戶現在希望我們從數據庫中讀取內容。他們想要保存實際的html內容(表...表的結尾)。

所以我把代碼存儲在數據庫列中。我可以通過使用@Html將此內容傳遞給我的查看功能。

現在我的新斯卡拉取景功能如下所示:

@(hostName: String, token:String, protocol: String, supportEmail: String, content: String) 
@import helper._ 
<!DOCTYPE html> 

<html> 
<head> 
    <title></title>  
</head> 
@Html(content) 

卜我不能通@token@supportEmail動態。它被視爲一個純字符串。渲染後,它看起來像下面這樣:

我們的應用程序將允許您從您的設備訪問您的公司內部網,文件和SaaS服務。

您的激活碼@token

如果您有任何疑問,請聯繫我們的支持團隊隨時@supportEmail。

最好的問候,
支持團隊

誰能給我解釋一下我什麼是錯與@Html,可以解析動態內容或沒有。如果沒有,還有其他選擇。

回答

0

@Html函數允許您從變量中插入HTML片段,而不會轉義特殊字符,如<>。但是,它僅適用於靜態HTML,不幸的是不會解析其中的其他Scala代碼。

對於您的情況,實現您的要求的最簡單方法是在將控制器中的內容傳遞給視圖之前準備控制器中的內容。在控制器的方法的代碼看起來或多或少是這樣的:

public Result showContent() { 
    //fetching all your data here 
    content = content.replace("@token", token); 
    content = content.replace("@supportEmail", supportEmail); 
    return ok(views.html.test.render(hostName, protocol, content)); 
} 

基本上,你是不是被迫使用表裏面的內容捻佔位符。如何在內容中標記可替換參數的決定由您決定。只要確保replace調用符合你的模式。

我認爲tokensupportEmail不在視圖的其他地方使用,因此我將它們從視圖的標題中刪除。

@(hostName: String, protocol: String, content: String) 

簡單的解決方案通常是最佳的解決方案:)

+0

即使我認爲同樣的解決方案,但要檢查,如果我可以使用Scala任何其他替代,我可以通過動態PARAMS。現在我開始使用你建議的解決方案來實施 – Parveen

相關問題