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

템플릿을 처리 할 때 값이 제공되는 여러 자리 표시자가 포함 된 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이 존재하는지 확인하는 방법이 있다면이 여분의 변수를 추가하지 않아도됩니다.



답변

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

[#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>


답변

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

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

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


답변

또한 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?


답변

많은 사람들이 변수가 비어 있고 비어 있지 않은지 확인하기를 원한다고 생각합니다. 나는 존재와 공허함을 검사하는 것이 많은 경우에 좋은 아이디어라고 생각하며 템플릿을보다 강력하고 바보 같은 오류가 덜 발생시킵니다. 즉, 변수를 사용하기 전에 변수가 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.


답변

FreeMarker 2.3.7 이전 버전의 경우

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

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


답변