legacy-knowledge-base
公開されました Jul. 2, 2025

記事テンプレートのレンダリング時の InvalidReferenceException

投稿者

Roberto Díaz

knowledge-article-header-disclaimer-how-to

knowledge-article-header-disclaimer

legacy-article

learn-legacy-article-disclaimer-text

問題

  • 既存の estructure に新しいフィールドを追加すると、テンプレートでこのフィールドをレンダリングしようとして更新しない限り、記事で InvalidReferenceException が生成されます。
    freemarker.core.InvalidReferenceException: [... Exception message was already printed; see it above ...]
    at freemarker.core.InvalidReferenceException.getInstance(InvalidReferenceException.java:134)
    at freemarker.core.UnexpectedTypeException.newDescriptionBuilder(UnexpectedTypeException.java:85)
    at freemarker.core.UnexpectedTypeException.<init>(UnexpectedTypeException.java:48)
    at freemarker.core.NonHashException.<init>(NonHashException.java:49)
    at freemarker.core.Dot._eval(Dot.java:48)
    at freemarker.core.Expression.eval(Expression.java:101)
    at freemarker.core.MethodCall._eval(MethodCall.java:55)
    at freemarker.core.Expression.eval(Expression.java:101)
    at freemarker.core.Assignment.accept(Assignment.java:134)
    at freemarker.core.Environment.visit(Environment.java:331)
    at freemarker.core.Environment.visit(Environment.java:337)
    at freemarker.core.Environment.visit(Environment.java:337)
    at freemarker.core.Environment.process(Environment.java:310)
    at freemarker.template.Template.process(Template.java:383)
    at com.liferay.portal.template.freemarker.internal.FreeMarkerTemplate.processTemplate(FreeMarkerTemplate.java:154)
    at com.liferay.portal.template.BaseTemplate.processTemplate(BaseTemplate.java:163)
    at com.liferay.journal.internal.transformer.JournalTransformer.doTransform(JournalTransformer.java:367)
    at com.liferay.journal.internal.transformer.JournalTransformer.transform(JournalTransformer.java:103)

環境

  • Liferay DXP 7.0
  • Liferay DXP 7.1
  • Liferay DXP 7.2
  • Liferay DXP 7.3
  • Liferay DXP 7.4

解像度

  • ここでの問題は、構造体にはフィールドがありますが、記事のコンテンツにはありません。そのため、構造体をレンダリングしようとすると、フィールドが null になり、 getData() メソッドが使用されると null ポインター例外がスローされます。
  • この NPE は、テンプレート エンジンによって InvalidReferenceException として表示されます。
  • 解決策は、この種のフィールドのテンプレートに null チェックを追加して、フィールドが nullの場合にレンダリングされないようにすることです。
  • のようにレンダリングする代わりに
    <#assign field = field.getData()>
    あなたが使用できる
    <#if field?? && field.getData()?? >
        <#assign field = field.getData()>
    <#else>
    <#assign field = "">
    </#if>
did-this-article-resolve-your-issue

legacy-knowledge-base