![](/img/trans.png)
[英]@ManagedProperty - Inject one request scoped bean into another request scoped bean
[英]Inject request parameters into view scoped bean (different portlets)
我试图交流两个视图,第一个视图在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");
}
请注意,必须在基于Liferay的页面上显示portlet-B视图,这与显示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'(零)。
我不知道我执行目标任务的方式是否正确。 但是,如果是这样,我不知道为什么它不起作用。 因此,我非常感谢您的任何帮助/评论。 提前致谢。
Portlet-A查看代码:
<p:dataScroller value="#{searchManager.List}" var="ccp" >
...
<p:link value="#{ccp.title}" onclick="myonClick(event, #{ccp.id})" />
...
</p:dataScroller>
JS代码:
function myonClick(event, itemId) {
event.preventDefault();
window.open("viewer" + "?id=" + itemId, "_blank");
}
Portlet-B视图代码(Portlet-B视图必须在基于Liferay的页面上显示,这与显示portlet-A视图的页面不同):
<h:body>
<p>Details</p>
<h:outputText value="#{itemManager.id}" />
</h:body>
Portlet-B端管理的bean:
@ManagedBean(name = "resultItemManager")
@ViewScoped
public class ItemManager implements Serializable {
@ManagedProperty(value = "")
public long id;
...
@PostConstruct
public void init() {
FacesContext facesContext = FacesContext.getCurrentInstance();
ExternalContext extContext = facesContext.getExternalContext();
RenderRequest renderRequest = (RenderRequest) extContext.getRequest();
HttpServletRequest httpRequest = PortalUtil.getOriginalServletRequest(
PortalUtil.getHttpServletRequest(renderRequest));
this.id = Long.parseLong(httpRequest.getParameter("id"));
}
}
这样,就无需使用ViewParams。 El'itemId'参数被附加到http请求,以便在Portlet-B侧的init()PostConstruct方法中对其进行检索。 此外,视图显示在新的不同页面上。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.