Wystąpił błąd podczas przetwarzania szablonu.
The following has evaluated to null or missing:
==> assetRenderer.getArticle [in template "10157#10197#9193446" at line 20, column 28]
----
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 article = assetRenderer.getAr... [in template "10157#10197#9193446" at line 20, column 9]
----
1<#assign liferay_ui = PortletJspTagLibs["/META-INF/liferay-ui.tld"] />
2<#assign liferay_portlet = PortalJspTagLibs["/META-INF/liferay-portlet-ext.tld"] />
3
4<div class="home-page-news-adn-events-container ps-page">
5<div class="home-page-title-container">
6 <h1 tabindex="0"><@liferay_ui["message"] key="eu.europa.publications.euvoc-MetadataRegistry.publicationSchedule" /></h1>
7</div>
8
9<div class="nata-portlet-container">
10 <@liferay_portlet["runtime"] portletName="com_liferay_journal_content_web_portlet_JournalContentPortlet" instanceId="8940379"/>
11</div>
12
13<#assign yyyyDate = "0" />
14
15<#list entries as entry>
16 <#assign entry = entry />
17 <#assign assetRenderer = entry.getAssetRenderer() />
18 <#assign className = assetRenderer.getClassName() >
19
20 <#assign article = assetRenderer.getArticle() />
21 <#assign articleId = article.getArticleId() />
22 <#assign groupId = article.getGroupId() />
23
24 <#assign docXml = saxReaderUtil.read(entry.getAssetRenderer().getArticle().getContent()) />
25 <#assign rootElement = docXml.getRootElement() />
26 <#assign availableLocales = rootElement.attribute("available-locales").getText() />
27 <#assign defaultLocale = rootElement.attribute("default-locale").getText() />
28
29
30 <#-- handle the date -->
31 <#assign dateY = docXml.valueOf("//dynamic-element[@name='Date80yx']/dynamic-content/text()") />
32 <#-- Parse the date to a date object -->
33 <#assign dateY = dateY?datetime("yyyy-MM-dd")>
34 <#assign dateY = dateY?date />
35
36 <#if yyyyDate != dateY?string["yyyy"] >
37 <#assign yyyyDate = dateY?string["yyyy"] />
38 <div class="year-container"><h3 tabindex="0" aria-label="Events in: ${yyyyDate}">${yyyyDate}</h3></div>
39 </#if>
40
41 <#-- handle the title -->
42 <#if (availableLocales?contains(locale)) >
43 <#assign title = docXml.valueOf("//dynamic-element[@name='Title']/dynamic-content[@language-id='"+locale+"']/text()") />
44 <#else>
45 <#assign title = docXml.valueOf("//dynamic-element[@name='Title']/dynamic-content[@language-id='"+defaultLocale+"']/text()") />
46 </#if>
47
48 <#-- handle the content -->
49 <#if (availableLocales?contains(locale)) >
50 <#assign content = docXml.valueOf("//dynamic-element[@name='Content']/dynamic-content[@language-id='"+locale+"']/text()") />
51 <#else>
52 <#assign content = docXml.valueOf("//dynamic-element[@name='Content']/dynamic-content[@language-id='"+defaultLocale+"']/text()") />
53 </#if>
54
55 <#-- handle the URL -->
56 <#assign url = docXml.valueOf("//dynamic-element[@name='URL']/dynamic-content/text()") />
57
58 <div aria-label="Event number: ${entry_index +1}, Event date: ${dateY}, Event name: ${title}" class="row home-page-news-adn-events-event-container">
59 <div class="left col p-0">
60 <div class="top">${dateY?string["MMMM"]}</div>
61
62 <div class="bottom">${dateY?string["d"]}</div>
63 </div>
64 <div class="right col p-0">
65 <h4>${title}</h4>
66 <p>${content}</p>
67 </div>
68 </div>
69
70
71</#list>
72</div>
73<style>
74.home-page-news-adn-events-container{
75 width: 100%;
76}
77.home-page-title-container{
78 display: block !important;
79}
80
81.home-page-title-container h1 {
82 margin: 0 !important;
83 color: #444444;
84}
85
86.home-page-news-adn-events-container .year-container {
87 height: 32px;
88}
89.home-page-news-adn-events-container .year-container h3{
90 border-top: 1px solid #E3E3E3;
91 margin: 0;
92 height: 31px;
93}
94
95.home-page-news-adn-events-container .year-container {
96 height: 32px;
97}
98.home-page-news-adn-events-container .year-container h3{
99 border-top: 1px solid #E3E3E3;
100 margin: 0;
101 height: 31px;
102 line-height: 31px;
103 text-align: center;
104 font-size: 16px;
105 color: #444;
106}
107
108.home-page-news-adn-events-event-container {
109 border-top: 1px solid #DDDDDD;
110 padding: 15px 0;
111}
112.home-page-news-adn-events-event-container:hover{
113 text-decoration: unset!important;
114 background: #F0F3F9;
115}
116.home-page-news-adn-events-event-container .right{
117 padding-left: 24px !important;
118}
119.home-page-news-adn-events-event-container .right p{
120 font-size: 14px;
121 line-height: 20px;
122}
123
124.home-page-news-adn-events-event-container .left{
125 max-width: 81px;
126}
127.home-page-news-adn-events-event-container .left .top {
128 font-size: 13px;
129 line-height: 18px;
130 padding-top: 14px;
131 text-align: center;
132 background: #F0F3F9;
133}
134.home-page-news-adn-events-event-container .left .bottom {
135 font-size: 20px;
136 line-height: 25px;
137 padding: 8px 8px 17px 8px;
138 text-align: center;
139 background: #F0F3F9;
140 font-weight: bold;
141}
142.home-page-news-adn-events-event-container .right h4{
143 font-size: 14px;
144 line-height: 20px;
145 color: #444444;
146}
147.home-page-news-adn-events-container .home-page-bottom-link-container{
148 text-align: center;
149}
150.home-page-news-adn-events-container .home-page-bottom-link-container a{
151 color: #444444;
152 font-size: 13px;
153 line-height: 18px;
154 text-decoration: underline;
155}
156</style>