How Indian agriculture IoT solutions work despite unique challenges
An error occurred while processing the template.
The following has evaluated to null or missing: ==> serviceLocator.findService("com.giks.generic.service.service.BlogLocalService") [in template "35243#35273#93820" at line 75, column 22] ---- 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 blgservice = serviceLocator.f... [in template "35243#35273#93820" at line 75, column 1] ----
1<style>
2.main-card .container > .row:first-child{
3 padding-bottom: 50px;
4}
5.main-card .container > .row:first-child .col-4{
6 display: flex;
7 justify-content: center;
8 align-items: center;
9}
10.main-card .container > .row:last-child .col-4{
11 padding: 0 !important;
12}
13.main-card h2{
14 text-transform: capitalize;
15 font-size: 1.8rem;
16}
17.main-card .container > .row:last-child .col-4 > div{
18 border-left: 1px solid rgba(0, 0, 0, 0.125);
19 padding: 0px 15px;
20}
21.main-card .container > .row:last-child .col-4 .card{
22 transition: cubic-bezier(0.075, 0.82, 0.165, 1);
23 text-align: center;
24 position: relative;
25 display: flex;
26}
27.main-card .container > .row:last-child .col-4 .card .img-responsive{
28 max-width: 100%;
29 height: auto;
30 width: 100%;
31 object-fit: cover;
32}
33<#--.main-card .container > .row:last-child .col-4 .card .card-title{
34 display: none;
35 transition: cubic-bezier(0.075, 0.82, 0.165, 1);
36}
37.main-card .container > .row:last-child .col-4 .card:hover .card-title{
38 background-color: #0000004f;
39 position: absolute;
40 display: block;
41 transition: cubic-bezier(0.075, 0.82, 0.165, 1);
42 top:0;
43 height: 100%;
44 display: flex;
45 align-items: center;
46 justify-content: center;
47}
48.main-card .container > .row:last-child .col-4 .card:hover .card-title h4{
49 color: #fff;
50}-->
51.main-card p{
52 text-align: justify;
53}
54.main-card ul li{
55 list-style:none;
56}
57.main-card a:hover{
58 text-decoration: none;
59}
60.portlet-content{
61 overflow: hidden;
62 padding: 0px !important;
63}
64.portlet-header h2.portlet-title-text{
65 display: none !important;
66}
67.figure img{
68 border-radius: 0px !important;
69}
70</style>
71<#assign serviceContext = staticUtil["com.liferay.portal.kernel.service.ServiceContextThreadLocal"].getServiceContext() />
72<#assign httpServletRequest = serviceContext.getRequest() />
73<#assign blogservice= serviceLocator.findService("com.liferay.blogs.service.BlogsEntryLocalService")/>
74<#assign assetservice= serviceLocator.findService("com.liferay.asset.kernel.service.AssetEntryLocalService")/>
75<#assign blgservice= serviceLocator.findService("com.giks.generic.service.service.BlogLocalService")/>
76<#if (httpServletRequest.getParameter("blogId"))?? >
77 <#assign friendyUrl=themeDisplay.getLayout().getFriendlyURL()/>
78 <#assign urlTitle=""/>
79 <#list friendyUrl?split("/") as x>
80 urlTitle = x;
81 </#list>
82 <#assign blog=blgservice.getBlogByUrlTitle(urlTitle) />
83 <section class="main-card">
84 <div class="container">
85 <div class="row">
86 <div class="col-4">
87 <h1>${blog.getTitle()}</h1>
88 </div>
89 <div class="col-8">
90 <figure class="figure">
91 <img src="${blog.getSmallImageURL(ThemeDisplay)}" class="figure-img img-fluid rounded" alt="img">
92 </figure>
93 </div>
94 </div>
95 <div class="row mb-2">
96 <div class="col-md-12">
97 <ul class="nav flex-row justify-content-end">
98 <li class="mx-2">
99 <div id="facebook">
100 <a class="" href="javascript:void(window.open('https://www.facebook.com/sharer.php?u=' + encodeURIComponent(document.location) + '?t=' + encodeURIComponent(document.title),'_blank'))">
101 <span class="hide">Facebook</span>
102<svg class="lexicon-icon lexicon-icon-social-facebook" role="presentation" viewBox="0 0 512 512">
103 <path class="lexicon-icon-outline" d="M483.7,0H28.3C12.6,0,0,12.6,0,28.3v455.5C0,499.4,12.6,512,28.3,512h245.2V313.7h-66.7v-77.3h66.7v-57c0-66.1,40.4-102.1,99.4-102.1c28.3,0,52.5,2.1,59.6,3v69.1h-40.9c-32.1,0-38.3,15.2-38.3,37.6v49.3h76.5l-10,77.3h-66.6V512h130.5c15.6,0,28.3-12.7,28.3-28.3V28.3C512,12.6,499.3,0,483.7,0z"></path>
104</svg> </a>
105 </div>
106 </li>
107 <li class="mx-2">
108 <div id="twitter">
109 <a class="" href="javascript:void(window.open('https://twitter.com/share?url=' + encodeURIComponent(document.location) + '&text=' + encodeURIComponent(document.title) + '&via=fabienb&hashtags=koandesign','_blank'))">
110 <span class="hide">Twitter</span>
111<svg class="lexicon-icon lexicon-icon-twitter" role="presentation" viewBox="0 0 512 512">
112 <path class="lexicon-icon-outline" d="M512.015 97.213c-18.842 8.368-39.089 14.015-60.332 16.531 21.68-12.991 38.358-33.589 46.2-58.108-20.306 12.026-42.776 20.774-66.71 25.485-19.164-20.423-46.462-33.179-76.688-33.179-58.020 0-105.039 47.048-105.039 105.039 0 8.222 0.936 16.238 2.721 23.934-87.308-4.389-164.698-46.2-216.516-109.749-9.041 15.508-14.22 33.559-14.22 52.812 0 36.457 18.55 68.612 46.727 87.425-17.234-0.556-33.414-5.267-47.575-13.137 0 0.439 0 0.877 0 1.317 0 50.91 36.222 93.336 84.266 102.99-8.807 2.399-18.082 3.687-27.679 3.687-6.759 0-13.343-0.673-19.779-1.901 13.371 41.723 52.169 72.123 98.135 72.942-35.959 28.176-81.252 44.971-130.465 44.971-8.486 0-16.853-0.498-25.046-1.464 46.493 29.815 101.704 47.195 161.041 47.195 193.226 0 298.879-160.075 298.879-298.879 0-4.565-0.117-9.070-0.293-13.576 20.481-14.776 38.3-33.267 52.374-54.334v0z"></path>
113</svg> </a>
114 </div>
115 </li>
116 <li class="mx-2">
117 <div id="linked-in">
118 <a class="" href="javascript:void(window.open('https://www.linkedin.com/shareArticle?url=' + encodeURIComponent(document.location) + '&title=' + encodeURIComponent(document.title),'_blank'))" >
119 <span class="hide">LinkedIn</span>
120<svg class="lexicon-icon lexicon-icon-social-linkedin" role="presentation" viewBox="0 0 512 512">
121 <path class="lexicon-icon-outline" d="M474.1,0H37.8C16.9,0,0,16.5,0,36.9V475c0,20.4,16.9,37,37.8,37h436.4c20.9,0,37.9-16.6,37.9-36.9V36.9C512,16.5,495,0,474.1,0z M151.9,436.3h-76V191.9h76V436.3z M69.8,114.6c0-60.6,88.1-60.6,88.1,0C157.9,175,69.8,173,69.8,114.6z M436.3,436.3h-75.9V317.5c0-28.3-0.5-64.8-39.5-64.8c-39.5,0-45.5,30.9-45.5,62.8v120.8h-75.8V191.9h72.8v33.4h1c10.1-19.2,34.9-39.5,71.8-39.5c76.9,0,91.1,50.6,91.1,116.4L436.3,436.3L436.3,436.3z"></path>
122</svg> </a>
123 </div>
124 </li>
125 </ul>
126 </div>
127 </div>
128 <div class="row">
129 <main class="col-8">
130 <p>${blog.getContent()}</p>
131 </main>
132 <aside class="col-4">
133 <div>
134 <h2>You might be interested in</h2>
135 <hr>
136 <#assign assetEntryList=assetservice.getAssetEntries(-1, -1)/>
137 <#if assetEntryList?has_content>
138 <#list assetEntryList as entry>
139 <#assign blogPkid=entry.getClassPK()?number/>
140
141 <#if blogPkid==blogsId>
142 <#assign assetEntryId=entry.getEntryId()/>
143 <#assign alltags=[]/>
144 <#assign alltags= assetservice.getAssetTagPrimaryKeys(assetEntryId)/>
145 <#assign count=0/>
146 <#list 0..alltags?size-1 as i>
147 <#assign tagId="${alltags[i]}"/>
148 <#assign blogIdNumber=tagId?number/>
149 <#assign alltag= assetservice.getAssetTagAssetEntries(blogIdNumber)/>
150 <#list alltag as j >
151 <#if count<3>
152 <#assign blogid="${j.getClassPK()}"/>
153 <#assign blg=blogid?number/>
154 <#assign blogdisplay=blogservice.getBlogsEntry(blg)/>
155 <#if blg==blogsId>
156
157 <#else>
158 <#assign count++/>
159 <div class="card">
160 <a href="/blogs/blogs-details?blogId=${blogdisplay.getEntryId()?string}">
161 <img class="img-responsive" src="${blogdisplay.getSmallImageURL(ThemeDisplay)}" alt="${blogdisplay.getTitle()}" />
162 <div class="card-title" title="">
163 <h4>${blogdisplay.getTitle()}</h4>
164 </div>
165 </a>
166 </div>
167 </#if>
168 </#if>
169 </#list>
170 </#list>
171 </#if>
172 </#list>
173 </#if>
174 </div>
175 </aside>
176 </div>
177 </div>
178 </section>
179</#if>