簡體   English   中英

將請求參數注入到視圖范圍的bean(不同的portlet)中

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM