Notícias
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(' ', '', '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>