Destaques

Um erro ocorreu enquanto processava o modelo.
The following has evaluated to null or missing:
==> assetRenderer.getArticle  [in template "40777138935285#20120#25665510" at line 15, column 44]

----
Tip: It's the step after the last dot that caused this error, not those before it.
----
Tip: If the failing expression is known to legally refer to something that's sometimes null or missing, either specify a default value like myOptionalVar!myDefault, or use <#if myOptionalVar??>when-present<#else>when-missing</#if>. (These only cover the last step of the expression; to cover the whole expression, use parenthesis: (myOptionalVar.foo)!myDefault, (myOptionalVar.foo)??
----

----
FTL stack trace ("~" means nesting-related):
	- Failed at: #assign docXml = saxReaderUtil.read(a...  [in template "40777138935285#20120#25665510" at line 15, column 9]
----
1<#assign AssetEntryLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetEntryLocalService") /> 
2<#assign JournalFolderLocalService = serviceLocator.findService("com.liferay.journal.service.JournalFolderLocalService") /> 
3<#assign JournalArticleLocalService = serviceLocator.findService("com.liferay.journal.service.JournalArticleLocalService") /> 
4 
5<#assign portletTitle = htmlUtil.escape(portletDisplay.getTitle()) /> 
6<div class="col-md-9 col-md-offset-1 my-5">	 
7  <h3 class="portlet-title-text portlet-title-editable mb-4">${portletTitle}</h3>  
8  
9  <#if entries?has_content> 
10    <ul class="rich-summary adt list-group list-group-flush text-break"> 
11      <#list entries as curEntry> 
12        <#assign entry = AssetEntryLocalService.getEntry(curEntry.getClassName(), curEntry.getClassPK()) /> 
13        <#assign assetRenderer = entry.getAssetRenderer() /> 
14        <#assign journalArticle = assetRenderer.getAssetObject() /> 
15        <#assign docXml=saxReaderUtil.read(assetRenderer.getArticle().getContent()) /> 
16        <#assign entryTitle = htmlUtil.escape(assetRenderer.getTitle(locale)) /> 
17        <#assign viewURL = assetPublisherHelper.getAssetViewURL(renderRequest, renderResponse, assetRenderer, entry, !stringUtil.equals(assetLinkBehavior, "showFullContent"))?keep_before("?redirect=") /> 
18				<#assign articleId = journalArticle.getArticleId() /> 
19				 
20        <#-- Configuração de datas --> 
21        <#assign dateFormat = "dd/MM/yyyy" /> 
22        <#assign timeFormat = "HH'h'mm" /> 
23        <#assign createDate = journalArticle.getCreateDate() /> 
24        <#assign modifiedDate = journalArticle.getModifiedDate() /> 
25        <#assign displayDate = journalArticle.getDisplayDate() /> 
26        <#assign createDateFormatted = dateUtil.getDate(createDate, dateFormat, locale) /> 
27        <#assign createTimeFormatted = dateUtil.getDate(createDate, timeFormat, locale) /> 
28        <#assign modifiedDateFormatted = dateUtil.getDate(modifiedDate, dateFormat, locale) /> 
29        <#assign modifiedTimeFormatted = dateUtil.getDate(modifiedDate, timeFormat, locale) /> 
30         
31        <#assign chamada = docXml.valueOf("//dynamic-element[@field-reference='call']/dynamic-content[@language-id='${locale}']/text()") /> 
32        <#assign has_image = false /> 
33        <#assign capa_url = "" /> 
34 
35        <#-- Tentativa de obter imagem pelo smallImage - Abordagem robusta --> 
36        <#if journalArticle.isSmallImage()> 
37          <#if journalArticle.getSmallImageURL()?has_content> 
38            <#assign capa_url = journalArticle.getSmallImageURL() /> 
39            <#-- Adiciona parâmetro de thumbnail se URL for do Liferay --> 
40            <#if capa_url?contains("/documents/") && !capa_url?contains("?")> 
41              <#assign capa_url = capa_url + "?imageThumbnail=1" /> 
42            <#elseif capa_url?contains("/documents/") && !capa_url?contains("imageThumbnail=")> 
43              <#assign capa_url = capa_url + "&imageThumbnail=1" /> 
44            </#if> 
45            <#assign has_image = true /> 
46          <#else> 
47            <#attempt> 
48              <#assign temp_url = journalArticle.getArticleImageURL(themeDisplay) /> 
49              <#if temp_url?has_content> 
50                <#assign capa_url = temp_url /> 
51                <#-- Adiciona parâmetro de thumbnail se URL for do Liferay --> 
52                <#if capa_url?contains("/documents/") && !capa_url?contains("?")> 
53                  <#assign capa_url = capa_url + "?imageThumbnail=1" /> 
54                <#elseif capa_url?contains("/documents/") && !capa_url?contains("imageThumbnail=")> 
55                  <#assign capa_url = capa_url + "&imageThumbnail=1" /> 
56                </#if> 
57                <#assign has_image = true /> 
58              <#else> 
59                <#-- Fallback para URL direta baseada em ID --> 
60                <#assign capa_url = themeDisplay.getPortalURL() + "/image/journal/article?img_id=" + journalArticle.getSmallImageId() + "&t=" + .now?long /> 
61                <#assign has_image = true /> 
62              </#if> 
63            <#recover> 
64              <#-- Em caso de erro, tenta o método direto --> 
65              <#assign capa_url = themeDisplay.getPortalURL() + "/image/journal/article?img_id=" + journalArticle.getSmallImageId() + "&t=" + .now?long /> 
66              <#assign has_image = true /> 
67            </#attempt> 
68          </#if> 
69        </#if> 
70 
71        <li  
72          class="list-group-item"  
73          data-class-pk="${curEntry.getClassPK()}" 
74          data-class-name="${curEntry.getClassName()}" 
75					data-article-id="${articleId}" 
76
77          <div class="row align-items-center"> 
78            <#-- Coluna da imagem de destaque (se existir) --> 
79            <#if has_image> 
80              <div class="col-md-4"> 
81                <div class="news-thumbnail mb-3 mb-md-0"> 
82                  <a href="${viewURL}" class="d-block"> 
83                    <div style="position: relative; padding-top: 75%; overflow: hidden; background-color: #f5f5f5;"> 
84                      <img src="${capa_url}" alt="${entryTitle}" class="img-fluid rounded" onerror="this.style.display='none'" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; object-fit: cover;" /> 
85                    </div> 
86                  </a> 
87                </div> 
88              </div> 
89              <div class="col-md-8"> 
90            <#else> 
91              <div class="col"> 
92            </#if> 
93              <div class="float-right"> 
94                <@getEditIcon /> 
95              </div> 
96 
97              <#-- Adicionando a div com data e hora de criação e atualização --> 
98              <div class="data-post"> 
99                ${createDateFormatted} às ${createTimeFormatted} - Atualizado em ${modifiedDateFormatted} às ${modifiedTimeFormatted} 
100              </div> 
101 
102              <h4 class="entry-title"> 
103                <a class="entry-link" href="${viewURL}">${entryTitle}</a> 
104              </h4> 
105 
106              <div class="asset-content"> 
107                <div class="asset-summary pt-1"> 
108                  <#if chamada != ""> 
109                    <p>${chamada}</p> 
110                  <#else> 
111                    <#assign docXml = saxReaderUtil.read(journalArticle.getContent()) /> 
112                    <#assign xmlValue = docXml.valueOf("//dynamic-element[@type='rich_text']/dynamic-content[@language-id='${locale}']/text()")?replace('<[^>]+>','','r')?trim /> 
113                    <p>${xmlValue?replace('<[^>]+>', '', 'r')?replace('&nbsp;', '', 'r')?truncate_w(137, "")}...</p> 
114                  </#if> 
115                </div> 
116              </div> 
117            </div> 
118          </div> 
119        </li> 
120      </#list> 
121    </ul> 
122  <#else> 
123    <#if !themeDisplay.isSignedIn()> 
124      ${renderRequest.setAttribute("PORTLET_CONFIGURATOR_VISIBILITY", true)} 
125    </#if> 
126     
127    <div class="alert alert-info"> 
128      <@liferay_ui["message"] key="there-are-no-results" /> 
129    </div> 
130  </#if> 
131</div> 
132 
133<#macro getEditIcon> 
134  <#if assetRenderer.hasEditPermission(themeDisplay.getPermissionChecker())> 
135    <#assign editPortletURL = assetRenderer.getURLEdit(renderRequest, renderResponse, windowStateFactory.getWindowState("NORMAL"), themeDisplay.getURLCurrent())!"" /> 
136    <#if validator.isNotNull(editPortletURL)> 
137      <#assign title = languageUtil.format(locale, "edit-x", entryTitle, false) /> 
138      <@liferay_ui["icon"] cssClass="icon-monospaced visible-interaction" icon="pencil" markupView="lexicon" message=title url=editPortletURL.toString() /> 
139    </#if> 
140  </#if> 
141</#macro>