jsp - 如何在 JSP 中访问 Liferay 中的部分 Web 内容

标签 jsp liferay

精简版

我已经定义了一个自定义的 Web 内容结构;现在我只想访问和发出自定义 portlet 的基于 JSP 的 View 中的结构定义的字段之一。

我正在寻找完全在服务器端的东西,最好完全在 JSP 中完成(即没有自定义 Controller 逻辑,没有 Javascript)。我可以接受少量的 servlet 代码和/或奇怪的 JSTL。

较长的版本

我正在构建一个显示一些用户数据的自定义 portlet。如果给定用户 没有数据可显示,我想改为显示一些静态内容。实际上有一些特殊的场景,而不是正常的数据显示,我想显示一些静态内容中的一个。

为了便于维护,我将这些静态内容片段作为 portlet 实例配置的一部分。因为我预计 portlet 会得到广泛使用,并且希望在一个地方管理这些静态片段,所以我打算创建一个新的 Web 内容结构来为每个静态场景捕获单独的、命名的 HTML blob。然后 portlet 实例将被配置为通过 ID 依赖于那部分 Web 内容。结果是站点维护人员将能够更新单个 Web 内容,站点中的所有 portlet 实例将自动反射(reflect)该更改。

在其他 portlet 中,我使用了 <liferay-ui:journal-article>标记以发出 Web 内容的全部内容(在 portlet 实例配置中标识),例如:

<liferay-ui:journal-article
    groupId="${_config_templateGroupId}"
    articleId="${_config_templateArticleId}"
/>

但是,在这种情况下,我希望只发出结构定义的一个字段。

The official wiki提到 journal-article 标签接受可选的 templateId属性。我想我可以通过为每个场景定义单独的模板来完成这项工作,每个场景只从结构中发出所需的字段。但是,wiki 还指出 templateId在 6.0.2 版本之前被忽略——我使用的是 6.0 EE; Sadface 少校。

我对任何可用的替代方案感兴趣。我显然可以将整个内容发送到隐藏元素中,然后使用 Javascript 将相关部分移动到聚光灯下——但作为前端开发人员,这冒犯了我对基本文档预脚本的最低准确性的敏感度。

因此:没有基于 Javascript 或 CSS 的技巧(又名 smoke-and-mirrors)。只有可以完全在相对普通的 JSP 中实现的 100% 基于服务器的解决方案才会被接受。

伟大而可怕的互联网啊,实现我的愿望吧!

最佳答案

如果我没有错误地理解您的简短版本,那么这可能是您正在寻找的解决方案。

这是我们为实现类似要求而编写的代码的摘录。

您可以参数化 Xpath 并从中创建一个 tag

public static final String DYNAMIC_ELEMENT_NAME = "/root/dynamic-element[@name='";
public static final String NEWS_IMAGE_URL = "imageUrl";
public static final String DYNAMIC_CONTENT = "']/dynamic-content";       

journalArticle = JournalArticleLocalServiceUtil.getArticle(Long.valueOf(journalArticleId));
Document document = SAXReaderUtil.read(journalArticle.getContent());
String xpathExpression = Constants.DYNAMIC_ELEMENT_NAME + Constants.NEWS_IMAGE_URL + Constants.DYNAMIC_CONTENT;
if (document.selectSingleNode(xpathExpression) != null) {
    String imageUrl = document.selectSingleNode(xpathExpression).getText();
}

关于jsp - 如何在 JSP 中访问 Liferay 中的部分 Web 内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17286150/

相关文章:

java - 如何从mysql表中检索字符值?

javascript - 如何在单击按钮时重置 portlet 参数?

java - Java中从文件的相对路径获取文件大小

postgresql - Liferay 批量更新异常 : Batch entry 0 insert into LayoutSet

java - 如何在 servlet 中创建多个 JSON 数组到 JSON 对象

java - 当大型 HTML 页面加载时,AJAX 从大型 HTML 页面获取数据

java - 通过href将Web-inf中的jsp表单重定向到javaResources中的servlet

java - 请求的资源在 Spring MVC 中不可用

java - 将 Grails 应用程序与非 Grails liferay 一起部署?

java - 如何开始使用liferay