我试图传达两个视图,portlet-A 中的第一个视图和 portlet-B 中的第二个视图(同一个 .war 中的两个 portlet)。为此,我决定使用 JSF 'f:viewParam' 和 'f:param' 特性将属性(来自 portlet-A 视图)注入请求对象,以便 portlet-B 视图可以从请求对象中检索它并将此类属性值传递给视图范围的支持 bean 属性。
Portlet-A 查看代码:
<p:dataScroller value="#{searchManager.List}" var="ccp" >
...
<p:link value="#{ccp.title}" onclick="myonClick(event)" >
<f:param name="id" value="#{ccp.id}" />
</p:link>
...
</p:dataScroller>
JS代码:
function myonClick(event) {
event.preventDefault();
window.open("viewer", "_blank");
}
请注意,portlet-B 视图必须显示在基于 Liferay 的页面上,与显示 portlet-A 视图的页面不同。
Portlet-B 查看代码:
<f:metadata>
<f:viewParam name="id" value="#{resultItemManager.id}" />
</f:metadata>
<h:head />
<h:body>
<p>Details:</p>
<h:outputText value="#{resultItemManager.id}" />
</h:body>
当显示 portlet-B 时,浏览器地址字段设置为“ http://host:8080/viewer ”,并且标签呈现为“0”(零)。
我不知道我执行目标任务的方式是否正确。但如果是,我不知道为什么它不起作用。所以我真的很感激任何帮助/评论。提前致谢。