2015-05-28 34 views
5

Geçenlerde arayüzlerinde java 8 varsayılan yöntemlerini kullanmaya başladı ve Freemarker onları göremiyorum benziyor ettik: Bu, bir demet diyoruz çünkü yazıkFreemarker ve java8 varsayılan yöntemler?

${myRatings.notEmpty()}

The following has evaluated to null or missing: 
==> myRatings.notEmpty 

olduğunu şablonlarımızdaki yöntemler. Bunun için bir çözüm var mı? Belki bazı yamalar?

Internets çoğunlukla gerçekten pek mantıklı getFoo() varsayılan yöntemlerin anlatılır, ama ben normal yöntem çağrıları değil getters bahsediyorum.

+0

@biziclop bunu yaptı ama çok fazla örnek kodu yok – alamar

cevap

6

Güncelleme: FreeMarker 2.3.26 bunun için bir çözüm getirmiştir. version history alındı:

FREEMARKER-24: (varsayılan olarak etkin değildir) Added çözümü rağmen Java 8 varsayılan yöntemleri (ve onlar tanımlayan fasulye özelliklerini) şablonlara açığa olduğunu java.beans.Introspector (resmi JavaBeans Introspector) onları en azından JRE 1.8.0_66'dan itibaren yok sayar. , Bu geçici çözümü etkinleştirmek ya 2.3.26 için kullanılan DefaultObjectWrapper veya BeansWrapper ait incompatibleImprovements yapıcı argüman değerini artırmak, veya true onun treatDefaultMethodsAsBeanMembers ayarını ayarlayın. onun varsayılan Configuration ait object_wrapper ayarını bırakmak eğer varsayılan object_wrapper tarafından devralınmışsa olarak, bu Configuration 2.3.26 ila incompatibleImprovements ayarı artırmak için yeterli olduğunu unutmayın.

Orjinal cevap: Freemarker nesneleri görür nasıl

birçok Java teknolojileri taşıdır JavaBeans şartname dayanmaktadır. Uygunluğu sağlamak için dersleri java.beans.Introspector ile özetler. Görünüşe göre, JavaBeans Java 8 varsayılan yöntemlerini desteklemiyor. BeanInfo.getMethodDescriptors(), varsayılan yöntemleri döndürmez ve biz de alıcılarla BeanInfo.getPropertiesDescriptors() ile aynı sorunu yaşıyoruz. Standart Java API'sinin (veya JavaBeans'in) sahiplerinin neden böyle karar verdiklerini bilmiyorum ... Freemarker, kesinlikle er ya da geç bu JavaBeans sınırlamalarını aşmak için ekstra bir iç gözlem turu yapmak zorunda kalacak.