2011-02-25 218 views
1

我有一個發送通知電子郵件的ftl文件。我需要改變這些郵件的主題。所以,我已經設法改變主題並在其中傳遞一個URL。但我的要求是從URL傳遞特定參數。我可以在這個文件中寫一個java scriplet或javascript函數嗎?在ftl文件中寫入javascript

這裏的代碼片段:

<@s.document "${emailDigestBean.containerHtmlUrl}"> 
    <#if u.isHtml()> 
    <h1>${emailDigestBean.localizedText}</h1> 
    <#if emailDigestBean.briefDesc??> 
    <p id="message">${emailDigestBean.briefDesc}</p> 
    <p>Added By Me:${emailDigestBean.containerHtmlUrl}</p> 
    </#if> 

$ {} emailDigestBean.containerHtmlUrl ....包含了我想要解析URL。

在此先感謝。

回答

0

我不知道你的設置是什麼。你如何生成Freemarker模板?它是從Servlet中調用的嗎?

我想我的首選是在傳遞參數之前解析URL,即在Java代碼而不是模板代碼中進行。 Servlet API將已經解析了任何查詢字符串,如果這是你正在使用的,所以不需要再次執行。

例如,你的代碼可能是這個樣子:

Map params = new HashMap(); 
params.put("emailDigestBean", emailDigestBean); 

FreemarkerTemplateUtils.processTemplateIntoString(freemarkerConfig.getTemplate("template.ftl",params); 

假設這是從一個servlet中被調用,您可以添加在:你的模板中

params.put("param", request.getParameter("paramName")); 

然後從你可以使用$ {param}或其他任何方式訪問它。

+0

其實我甚至不知道設置是什麼。我只知道這是生成郵件的ftl,我必須解析URL並獲取一些參數。有什麼辦法可以在文件本身進行解析嗎? – Nisha 2011-02-25 09:42:28

+0

那麼你需要修改調用模板本身的代碼來將URL添加到模板中。所以你可能需要修改Java代碼。沒有更多的細節,這是不可能的。 – 2011-02-25 13:32:20

0

正如菲爾指出的那樣,除非我們知道設置,否則這個問題是無法回答的。 Freemarker模板(ftl)由freemarker引擎處理以產生文本輸出。在處理過程中,引擎可以訪問模板可以引用的一些數據(通常是數據圖)。代碼中的所有$.....都是對數據的引用。

爲了解決您的問題,您需要訪問ftl中的新數據。所以有人必須先把它放在包裏,然後你可以改變ftl來訪問它。查看你的設置並找出誰正在將數據添加到數據圖中。如果這是不可能的,那麼看看您是否可以將該屬性添加到包中已存在的bean中(emailDigestBean已經存在於包中)。