2008-11-20 101 views
135

我有一個Freemarker模板,其中包含一組處理模板時爲其提供值的佔位符。我希望有條件地包括模板的一部分如果用戶名變量提供,像:如何檢查FreeMarker模板中是否存在變量?

[#if_exists userName] 
    Hi ${userName}, How are you? 
[/#if_exists] 

但是,FreeMarker的手冊似乎表明if_exists已過時,但我不能找到另一種方式來實現這一目標。當然,我可以簡單的提供一個額外的布爾變量isUserName和使用這樣的:

[#if isUserName] 
    Hi ${userName}, How are you? 
[/#if] 

但是,如果有檢查用戶名是否存在,那麼我能避免增加這一額外變量的方法。

回答

227
[#if userName??] 
    Hi ${userName}, How are you? 
[/#if] 

或以標準freemarker的語法:

<#if userName??> 
    Hi ${userName}, How are you? 
</#if> 
+1

如果有其他人被這個拋出,#if語法應該被小於和大於字符而不是括號包圍。例如:<#if userName>> – Cameron 2010-03-17 18:23:39

+0

它實際上可以使用這種語法,所以我只是遵循這個問題的語法: 請參閱http://freemarker.sourceforge.net/docs/dgui_misc_alternativesyntax.html – 2010-03-18 07:52:55

+9

這只是檢查var是否存在。但是,如果你在「userName」中有一個空字符串,那麼<#if userName ??>將返回true!請參閱此頁上的@ user1546081答案以解決此問題。 – 2013-01-15 10:22:46

55

而且我覺得if_exists使用,如:

Hi ${userName?if_exists}, How are you? 

如果用戶名爲空,不會打破,結果,如果null將是:

Hi , How are you? 

if_exists現在已被棄用,並已被默認操作符替換!在

Hi ${userName!}, How are you? 

的缺省操作還支持默認值,比如:

Hi ${userName!"John Doe"}, How are you? 
2

我想想很多人都希望能夠檢查他們的變量是否爲空就好像它存在一樣。我認爲,在很多情況下檢查存在和空白是一個好主意,並且可以使您的模板更加健壯,不易出現愚蠢的錯誤。換句話說,如果您在使用它之前檢查以確保您的變量不爲空且不爲空,那麼您的模板變得更加靈活,因爲您可以向其中引入空變量或空字符串,並且它將工作相同在任一情況下。

<#if p?? && p?has_content>1</#if> 

比方說,你想確保p不僅僅是空白。然後,您可以在檢查之前修剪它,看它是否爲has_content

<#if p?? && p?trim?has_content>1</#if> 

UPDATE

請忽略我的建議 - has_content是所有需要,因爲它與空管檢查沿空檢查。做p?? && p?has_content相當於p?has_content,所以你不妨使用has_content

相關問題