2012-12-19 40 views
53

Làm thế nào để xử lý các giá trị null trong Freemarker? Tôi nhận được một số ngoại lệ trong mẫu khi các giá trị null có trong dữ liệu.Xử lý các giá trị null trong Freemarker

+0

thể trùng lặp: http://stackoverflow.com/questions/306732/how-to-check-if-a-variable-exists-in-a-freemarker-template – cowls

Trả lời

65

Bạn có thể sử dụng toán tử ?? kiểm tra:

kiểm tra này, nếu thuộc tính của đối tượng không phải là null:

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

kiểm tra này, nếu đối tượng hoặc thuộc tính không phải là null:

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

Nguồn: FreeMarker Manual

+1

sự khác biệt giữa phương pháp này là gì và has_content ?? –

+2

'has_content', bên cạnh kiểm tra rỗng, cũng kiểm tra xem giá trị có trống không. Điều này làm việc cho chuỗi, chuỗi, băm hoặc bộ sưu tập. Nếu đối tượng là ngày, boolean hoặc một số, thì nó hoạt động như không trống. Đối với tất cả các loại khác, nó sẽ hoạt động như trống. –

+0

Tôi có vấn đề này, nơi tôi phải kiểm tra xem giá trị trong đậu là null.I đã thử như sau: $ {checknull (Bean.getValue())}, trong đó checknull nếu một hàm <#function checknull x> <#if x??> <#return ""> <#else> <#return x> nhưng tôi nhận được "Lỗi thực thi vĩ mô: checknull cần tham số: x không được xác định." lỗi –

1

Tôi nghĩ rằng nó hoạt động theo cách khác

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

Nếu object.attribute là NOT NULL, sau đó nội dung sẽ được in.

54

Bắt đầu từ Freemarker 2.3.7, bạn có thể sử dụng this syntax:

${(object.attribute)!} 

hoặc, nếu bạn muốn hiển thị một văn bản mặc định khi thuộc tính là null:

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

Đối với những người đang sử dụng Freemarker như mẫu động cơ cho XDocReport, điều này đang làm việc sau khi thêm ' org.freemarker freemarker 2.3.22 'vào tệp pom.xml của bạn. –

+0

Làm thế nào để bạn làm điều đó nếu bạn có một ngày và ngày có thể là null? Nói cách khác object.dateAcquired nơi dateAcquired có thể là null và bạn có $ {object.dateAcquired? Date} –

+1

@StephaneGrenier sử dụng '$ {(object.dateAcquired? Date)!" Not present "}' –

0

Sử dụng ?? điều hành ở cuối câu hỏi <#if> của bạn.

Ví dụ này minh họa cách xử lý null giá trị cho hai danh sách trong mẫu 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> 
Các vấn đề liên quan