FreeMarker 템플릿에 변수가 있는지 확인하는 방법은 무엇입니까?


175

템플릿을 처리 할 때 값이 제공되는 여러 자리 표시자가 포함 된 Freemarker 템플릿이 있습니다. userName 변수가 제공되면 조건부로 템플릿의 일부를 포함하고 싶습니다.

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

그러나 FreeMarker 매뉴얼은 if_exists가 더 이상 사용되지 않는다고 표시하는 것처럼 보이지만 이것을 달성하는 다른 방법을 찾을 수 없습니다. 물론 추가 부울 변수 isUserName을 제공하고 다음과 같이 사용할 수 있습니다.

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

그러나 userName이 존재하는지 확인하는 방법이 있다면이 여분의 변수를 추가하지 않아도됩니다.

답변:


304

값이 존재하는지 확인하려면 다음을 수행하십시오.

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

또는 표준 프리 마커 구문을 사용하십시오.

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

값이 존재하고 비어 있지 않은지 확인하려면 다음을 수행하십시오.

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

1
다른 사람이 이것으로 인해 버린 경우 #if 구문은 대괄호가 아닌 문자보다 작고 큰 문자로 묶어야합니다. 예 : <#if userName ??>
Cameron

실제로이 구문을 사용하는 것이 가능하므로 질문의 구문을 따랐습니다. 참조 freemarker.sourceforge.net/docs/…
Ulf Lindback

10
이것은 var가 존재하는지 확인합니다. 그러나 "userName"에 빈 문자열이 있으면 <#if userName ??>이 true를 반환합니다 !! 이 문제를 해결하려면이 페이지의 @ user1546081 답변을 참조하십시오.
Adrien Be

94

이것은 더 적합한 것으로 보입니다.

<#if userName?has_content>
... do something
</#if>

http://freemarker.sourceforge.net/docs/ref_builtins_expert.html


2
var가 존재하는지 여부와 내용이 null 또는 비어 있지 않은지 확인합니다 (여기서는 빈 문자열 참조).
Adrien Be

4
기술적으로 부정확하고 변수 가 존재하지만 (op가 확인하고 싶었지만) 비어있는 경우 의도하지 않은 (거짓 부정) 동작으로 이어질 수 있으므로이를 하향 투표해야합니다 .
Madbreaks

65

또한 if_exists 가 다음과 같이 사용 되었다고 생각합니다 .

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

userName이 null이면 중단되지 않으며 null이면 결과는 다음과 같습니다.

Hi , How are you?

if_exists는 더 이상 사용되지 않으며 기본 연산자로 대체되었습니다! 에서와 같이

Hi ${userName!}, How are you?

기본 연산자는 다음과 같은 기본값도 지원합니다.

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

1
기본값 연산자를 사용하여 부울로 평가할 수 없습니다. 따라서 ifop가 요청한대로 명령문 에서 사용할 수 없습니다 .
Madbreaks

5

많은 사람들이 변수가 비어 있고 비어 있지 않은지 확인하기를 원한다고 생각합니다. 나는 존재와 공허함을 검사하는 것이 많은 경우에 좋은 아이디어라고 생각하며 템플릿을보다 강력하고 바보 같은 오류가 덜 발생시킵니다. 즉, 변수를 사용하기 전에 변수가 null이 아니고 비어 있지 않은지 확인하면 null 변수 또는 빈 문자열을 던질 수 있으므로 템플릿 이보다 유연 해집니다. 두 경우 모두

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

p단순히 공백 이상 을 유지하고 싶다고 가정 해 봅시다 . 그렇다면 당신은 그것을 확인하기 전에 그것을 다듬을 수 있습니다 has_content.

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

최신 정보

내 제안을 무시하십시오- has_content빈 검사와 함께 null 검사를 수행하기 때문에 필요한 모든 것입니다. 하는 p?? && p?has_content것은 동등하다 p?has_content, 그래서 당신은뿐만 아니라 사용할 수 있습니다 has_content.


2

FreeMarker 2.3.7 이전 버전의 경우

??측값을 처리 하는 데 사용할 수 없습니다 . 이전 구문은 다음과 같습니다.

<#if userName?exists>
   Hi ${userName}, How are you?
</#if>
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.