Liferay 7 GA4中Freemarker模板仅搜索访问触发异常问题咨询
解决Liferay 7 GA4 + Freemarker搜索访问触发错误模板的问题
你遇到的这个场景我之前也碰到过——同一FTL模板的页面,从搜索链接进就触发错误模板,其他入口却正常,核心原因是搜索上下文和常规页面访问的上下文变量、参数传递逻辑不一样,导致模板里的代码在搜索场景下触发了异常。
先看你给出的模板开头代码,这里第一个风险点就是直接取reserved-article-id的.data属性:
<#assign journalArticleId = .vars['reserved-article-id'].data> <#assign journalArticleResourceLocalServiceUtil = staticUtil["com.liferay.journal.service.JournalArticleResourceLocalServiceUtil"]> <#assign assetCategoryLocalServiceUtil = staticUtil["com.liferay.asset.kernel.service.AssetCategoryLocalServiceUtil"]>
当从搜索结果点击访问时,Liferay的搜索Portlet传递的上下文里,reserved-article-id这个变量可能根本没被注入,或者取值为null,这时调用.data就会抛出空指针异常,直接触发错误模板。
下面给你几个针对性的解决方案:
先做变量存在性校验,避免空指针
修改模板开头的赋值逻辑,先判断变量是否存在再取值,同时兼容搜索场景的参数传递:<#-- 先检查常规场景的reserved-article-id --> <#if .vars?contains_key('reserved-article-id') && .vars['reserved-article-id']?has_content> <#assign journalArticleId = .vars['reserved-article-id'].data> <#else> <#-- 搜索场景下尝试从请求参数获取articleId --> <#assign journalArticleId = request.getParameter('articleId')!> <#if journalArticleId?trim?isEmpty> <#-- 兜底处理,避免触发错误模板 --> <div class="alert alert-warning">内容暂时无法加载,请稍后重试</div> <#return> </#if> </#if>改用更可靠的方式获取当前文章
尽量不要依赖reserved-article-id这种上下文敏感的变量,而是通过themeDisplay来获取当前JournalArticle,兼容性更强:<#assign currentArticle = themeDisplay.getJournalArticle() /> <#if currentArticle?has_content> <#assign journalArticleId = currentArticle.getArticleId() /> <#else> <#-- 兜底逻辑 --> <div>无法获取文章内容</div> <#return> </#if>检查搜索结果的URL配置
有时候搜索Portlet生成的结果链接参数和常规页面不一致,比如少传了groupId或者参数名不对。可以进入搜索Portlet的配置页面,检查"结果显示"相关的设置,确保链接传递的参数和常规访问页面一致。
另外给你个调试小技巧,在模板里加个仅管理员可见的调试块,能直观看到不同场景下的变量差异:
<#-- 仅开发/管理员环境启用 --> <#if themeDisplay.isSignedIn() && themeDisplay.getUser().isAdmin()> <div style="border:1px solid #ff4444; padding:10px; margin:10px 0;"> <strong>Debug Info:</strong><br> reserved-article-id 存在吗?${.vars?contains_key('reserved-article-id')}<br> reserved-article-id 值:${.vars['reserved-article-id']?default('null')}<br> 请求参数列表:${request.getParameterMap()} </div> </#if>
内容的提问来源于stack exchange,提问作者Kala Siber
相关产品推荐
相关产品推荐

