Freemarker에서 null 값 처리


답변:


98

??테스트 연산자를 사용할 수 있습니다 .

이것은 객체의 속성이 null이 아닌지 확인합니다.

<#if object.attribute??></#if>

이것은 객체 또는 속성이 null이 아닌지 확인합니다.

<#if (object.attribute)??></#if>

출처 : FreeMarker 매뉴얼


1
이 접근 방식과 has_content의 차이점은 무엇입니까?
Anand B

3
has_content, null 검사 옆에 값이 비어 있지 않은지 확인합니다. 이것은 문자열, 시퀀스, 해시 또는 컬렉션에 대해 작동합니다. 객체가 날짜, 부울 또는 숫자이면 비어 있지 않은 것으로 작동합니다. 다른 모든 유형의 경우 비어있는 것으로 작동합니다.
Tom Verelst

나는 빈의 값이 null인지 확인 해야하는이 문제가 있습니다. $ {checknull (Bean.getValue ())}, 여기서 checknull if a function <#function checknull x> <#if x? ?> <#return ""> <#else> <#return x> </ # if> </ # function>하지만 "매크로 실행 오류 : checknull 필수 매개 변수 : x가 지정되지 않았습니다."가 표시됩니다. 오류
Anand B

반환을 취소해야합니다. <#function checknull x> <#if x ??> <#return x> <#else> <#return ""> </ # if> </ # function>
Tom Verelst

1
아래 답변을 확인하십시오 : stackoverflow.com/a/27614219/3002336
Anand Varkey Philips

106

freemarker 2.3.7부터 다음 구문을 사용할 수 있습니다 .

${(object.attribute)!}

또는 속성이 null다음과 같을 때 기본 텍스트를 표시하려는 경우 :

${(object.attribute)!"default text"}

1
Freemarker를 XDocReport의 템플릿 엔진으로 사용하는 사람들은 <dependency><groupId>org.freemarker</groupId><artifactId>freemarker</artifactId><version>2.3.22</version></dependency>pom.xml에 추가 한 후 작동 합니다.
Ludovic Guillaume

날짜가 있고 날짜가 null 일 수 있다면 어떻게합니까? 즉, dateAcquired가 null 일 수 있고 $ {object.dateAcquired? date}가있는 object.dateAcquired
Stephane Grenier

1
@StephaneGrenier 사용${(object.dateAcquired?date)!"not present"}
Tassos Bassoukos 2017

1
좋은 예입니다. 나를 많이 도왔다. 그러나 브래킷은 더 이상 사용되지 않습니다. ${salutation!'Dear Mr. or Mrs.'}
Sim0rn

기본값으로 .now? long을 어떻게 인쇄 할 수 있습니까?
Santiago Aceñolaza

4

다른 방식으로 작동한다고 생각합니다

<#if object.attribute??>
   Do whatever you want....
</#if>

object.attributeNULL이 아닌 경우 내용이 인쇄됩니다.


1

진술 ??끝에 연산자를 사용하십시오 <#if>.

이 예제 null는 Freemaker 템플릿에서 두 목록의 값 을 처리하는 방법을 보여줍니다 .

List of cars:
<#if cars??>
    <#list cars as car>${car.owner};</#list>
</#if>
List of motocycles:
<#if motocycles??>
    <#list motocycles as motocycle>${motocycle.owner};</#list>
</#if>

-3

선택 사항으로 변환 할 변수가 많은 경우 SubimeText를 다음과 함께 사용할 수 있습니다.

Find: \${([A-Za-z_0-9]*)}
Replace: \$\{${1}!\}

정규식 및 대소 문자 구분 옵션이 활성화되어 있는지 확인하십시오.

숭고한 정규식 교체

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.