短版
我已经定义了一个自定义的 Web 内容结构;现在我想在我的自定义 portlet 的基于 JSP 的视图中访问和发出结构定义的字段之一。
我正在寻找完全是服务器端的东西,最好完全在 JSP 内完成(即没有自定义控制器逻辑,没有 Javascript)。我可以接受少量的 servlet 代码和/或奇怪的 JSTL。
更长的版本
我正在构建一个显示一些用户数据的自定义 portlet。如果给定用户没有要显示的数据,我想展示一些静态内容。实际上有一些特殊的场景,而不是正常的数据显示,我想显示一些静态内容之一。
为了便于维护,我将这些静态内容作为 portlet-instance 配置的一部分。由于我预计 Portlet 的广泛使用以及在一个地方管理这些静态片段的愿望,我打算创建一个新的 Web 内容结构来为每个静态场景捕获单独的、命名的 HTML blob。然后,portlet 实例将被配置为通过 ID 依赖那段 Web 内容。结果是站点维护者将能够更新单个 Web 内容,并且站点上的所有 portlet 实例将自动反映该更改。
在其他 portlet 中,我使用<liferay-ui:journal-article>
标签来发出 Web 内容的全部内容(在 portlet-instance 配置中标识),例如:
<liferay-ui:journal-article
groupId="${_config_templateGroupId}"
articleId="${_config_templateArticleId}"
/>
但是,在这种情况下,我希望只发出结构定义的字段之一。
官方 wiki提到 journal-article 标签接受一个可选templateId
属性。我想我可以通过为每个场景定义单独的模板来完成这项工作,每个场景只从结构中发出所需的字段。但是,wiki 还指出templateId
在 6.0.2 版本之前被忽略了——我使用的是 6.0 EE;悲伤脸少校。
我对任何可用的替代品感兴趣。我显然可以将整个内容发送到一个隐藏元素中,然后使用 Javascript 将相关部分移到聚光灯下——但是作为前端开发人员,这冒犯了我对基本文档预脚本的最低准确性的敏感性。
所以:没有基于 Javascript 或 CSS 的技巧(又名Smoke-and-mirrors)。只有 100% 可以完全在相对普通的 JSP 中实现的基于服务器的解决方案才会被接受。
实现我的愿望,伟大而可怕的互联网!