Um erro ocorreu enquanto processava o modelo.
The following has evaluated to null or missing:
==> PORTLET_NAME  [in template "20102#20128#1144032" at line 51, column 28]

----
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: ${PORTLET_NAME}  [in template "20102#20128#1144032" at line 51, column 26]
----
1<#if banner_label.getSiblings()?has_content> 
2  <#assign desktop = "(min-width: 991px)" /> 
3  <#assign tablet = "(min-width: 767px)" /> 
4  <section class="banner-carousel internal-page" > 
5      <div id="banner-carousel-${randomNamespace}" class="carousel slide row" data-ride="carousel">         
6        <#if banner_label.getSiblings()?size gt 1> 
7          <ol class="carousel-indicators"> 
8            <#list banner_label.getSiblings() as cur_bannerImg> 
9                <li data-slide-to="${(cur_bannerImg?counter == 1)?then(0, (cur_bannerImg?counter - 1))}" data-target='#banner-carousel-${randomNamespace}' class="${(cur_bannerImg?counter == 1)?then('active', '')}"></li> 
10            </#list> 
11          </ol> 
12        </#if> 
13        <div class="carousel-inner"> 
14          <#list banner_label.getSiblings() as cur_banner> 
15            <div class="carousel-item ${(cur_banner?counter == 1)?then('active', '')}"> 
16              <picture class="banner"> 
17                <source media='${desktop}' srcset='${cur_banner.banner_image_desktop.getData()}'/> 
18                <source media='${tablet}' srcset='${cur_banner.banner_image_tablet.getData()}'/> 
19                <img src='${cur_banner.banner_image_mobile.getData()}' class="w-100" /> 
20              </picture> 
21              <div class="container carousel-caption"> 
22                <#if cur_banner.banner_position.getData()?has_content && cur_banner.banner_position.getData() != ""> 
23                  <div class="vertical-align ${cur_banner.banner_position.getData()}"> 
24                  <#else> 
25                  <div class="vertical-align left"> 
26                </#if> 
27                <#if cur_banner.getData()?has_content && cur_banner.getData() != ""> 
28                    <h2 class="title">${cur_banner.getData()}</h2> 
29                </#if> 
30                <#if cur_banner.banner_description.getData()?has_content && cur_banner.banner_description.getData() != ""> 
31                  <p>${cur_banner.banner_description.getData()}</p> 
32                </#if> 
33                 
34                <#if cur_banner.banner_btn_link.getData()?has_content> 
35                  <a class="btn btn-primary" href="${cur_banner.banner_btn_link.getData()}" role="button" title="${cur_banner.banner_btn_description.getData()}" target="${banner_label.banner_link_target.getData()}">${cur_banner.banner_btn_description.getData()}</a> 
36                </#if> 
37                
38                </div> 
39              </div> 
40            </div> 
41          </#list> 
42        </div> 
43      </div> 
44  </section> 
45</#if> 
46 
47<!-- Fixer asset --> 
48<script> 
49(() => { 
50  const PORTLET_NAME = 'com_liferay_asset_publisher_web_portlet_AssetPublisherPortlet'; 
51  const PARAM_PREFIX = `_${PORTLET_NAME}_`; 
52  const FRIENDLY_URL_BASE = '';  
53 
54  const getCurrentPath = () => window.location.pathname; 
55 
56  // Monta a URL "view_content.jsp" do Asset Publisher 
57  const buildAssetUrl = (assetEntryId, assetType = 'content') => { 
58    const params = new URLSearchParams(); 
59    params.set('p_p_id', PORTLET_NAME); 
60    params.set('p_p_lifecycle', '0'); 
61    params.set('p_p_state', 'maximized'); 
62    params.set('p_p_mode', 'view'); 
63    params.set(`${PARAM_PREFIX}mvcPath`, '/view_content.jsp'); 
64    params.set(`${PARAM_PREFIX}assetEntryId`, assetEntryId); 
65    params.set(`${PARAM_PREFIX}type`, assetType); 
66    return `${getCurrentPath()}?${params.toString()}`; 
67  }; 
68 
69  // Considera "quebrado" todo link que volta pra própria página sem parâmetros de asset 
70  const isBrokenAssetLink = (link) => { 
71    if (!link.href) return false; 
72    try { 
73      const url = new URL(link.href, window.location.origin); 
74      const sameHost = url.host === window.location.host; 
75      const samePath = url.pathname === getCurrentPath(); 
76      const noAssetParam = !url.searchParams.has(`${PARAM_PREFIX}assetEntryId`); 
77      return sameHost && samePath && noAssetParam; 
78    } catch { 
79      return false; 
80
81  }; 
82 
83  // Procura informações do asset no próprio <a> ou no contêiner do item (.asset-abstract, etc.) 
84  const extractAssetInfo = (link) => { 
85    const sources = [link, link.closest('[data-asset-entry-id], [data-assetentryid], .asset-abstract, .asset-entry, li, article')] 
86      .filter(Boolean); 
87 
88    let id, type, friendlyUrl, friendlyPath; 
89 
90    for (const el of sources) { 
91      const ds = el.dataset || {}; 
92      id = id || ds.assetEntryId || ds.assetentryid; 
93      type = type || ds.assetType || ds.assettype; 
94      friendlyUrl = friendlyUrl || ds.viewUrl || ds.friendlyUrl; 
95      friendlyPath = friendlyPath || ds.urlTitle || ds.friendlyUrlTitle; 
96
97 
98    return { 
99      id, 
100      type: type || 'content', 
101      friendlyUrl, 
102      friendlyPath, 
103    }; 
104  }; 
105 
106  const fixLink = (link) => { 
107    if (link.dataset.apFixed === 'true') return; 
108    if (!isBrokenAssetLink(link)) return; 
109 
110    const { id, type, friendlyUrl, friendlyPath } = extractAssetInfo(link); 
111 
112    if (friendlyUrl) { 
113      link.href = friendlyUrl; 
114    } else if (FRIENDLY_URL_BASE && friendlyPath) { 
115      link.href = `${FRIENDLY_URL_BASE}${friendlyPath}`; 
116    } else if (id) { 
117      link.href = buildAssetUrl(id, type); 
118    } else { 
119      return; // sem como reconstruir 
120
121 
122    link.dataset.apFixed = 'true'; 
123  }; 
124 
125  const fixAll = () => { 
126    const portlets = document.querySelectorAll( 
127      `[id*="${PORTLET_NAME}"], .portlet-asset-publisher` 
128    ); 
129    portlets.forEach((portlet) => { 
130      portlet.querySelectorAll('a[href]').forEach(fixLink); 
131    }); 
132  }; 
133 
134  // Liferay SPA e portlet re-renders 
135  const hookLiferay = () => { 
136    if (!window.Liferay || typeof Liferay.on !== 'function') return; 
137    Liferay.on('endNavigate', fixAll); 
138    Liferay.on('portletReady', fixAll); 
139  }; 
140 
141  // Lazy load / paginação / AJAX 
142  const observeMutations = () => { 
143    const observer = new MutationObserver(() => fixAll()); 
144    observer.observe(document.body, { childList: true, subtree: true }); 
145  }; 
146 
147  const start = () => { 
148    fixAll(); 
149    hookLiferay(); 
150    observeMutations(); 
151  }; 
152 
153  if (document.readyState === 'loading') { 
154    document.addEventListener('DOMContentLoaded', start); 
155  } else { 
156    start(); 
157
158})(); 
159</script> 

Sempre que você precisar, conte com o Sicoob

Investir nas melhores soluções para te atender de forma rápida e segura, garantindo o acesso aos serviços e às vantagens da sua cooperativa é uma prioridade para nós. Conheça todas elas e escolha a forma mais prática para realizar seus serviços financeiros.

 
  O App Sicoob está ainda mais completo e intuitivo. Se você é cooperado(a) e ainda não...

O Sicoobcard tem um app com um monte de funcionalidades feitas para facilitar o seu dia a dia....

O Moob é o aplicativo do Sicoob que facilita e incentiva o contato entre o cooperado e sua...

Nossa cooperação também é digital. A gente te ajuda a cuidar das suas finanças com...

Nossa cooperação também é digital. A gente te ajuda a cuidar das suas finanças com toda...

Nossa cooperação também é digital. A gente te ajuda a cuidar das suas finanças com toda...

O APP Sipag é mais uma opção para gerenciar o seu negócio. Com flexibilidade de acesso rápido...