簡體   English   中英

mojarra何時將命名容器添加到可選參數列表中?

[英]When does mojarra adds a naming container to the list of optional parameters?

在類AjaxBehaviorRenderer的源代碼中(第260行),有一行代碼顯然將NamingContainer Id附加到mojarra.ab(...)的可選參數列表中。 我從沒碰過它,所以對於何時使用它感到好奇:

RenderKitUtils.appendProperty(ajaxCommand, "com.sun.faces.namingContainerId", namingContainerId, true);

260行

上周在處理規格問題790時應解決的問題ao 通過ajax渲染其他形式會導致其視圖狀態丟失,我該如何重新添加呢? ,這是Portlet專家Neil Griffin向我解釋的。

看起來portlet可以具有多個JSF視圖,這些視圖呈現到同一HTML文檔,每個視圖都有自己的視圖狀態。 在portlet中,有一個特殊的UIViewRoot實例,該實例實現NamingContainer 在常規渲染期間,所有表單,輸入和命令都將具有以視圖自身的客戶端ID開頭的ID和名稱。 在同步回發期間,這將正常工作。 Portlet可以這種方式標識要還原的確切視圖。

但是,在異步回發期間, jsf.js將創建一堆額外的特定於Ajax的請求參數,例如javax.faces.sourcejavax.faces.partial.event等。這些請求參數名稱不帶有視圖自身的前綴。客戶編號。 因此,Portlet無法將它們與特定視圖關聯。 因此, 隱含問題3031

還有一個問題是,ajax響應中的視圖狀態標識符沒有以這種方式正確命名。 因此,portlet實現必須在所謂的“ JSF橋”中自定義部分響應編寫器。 在實現規范問題790時將考慮到這一點。與其像當前的實現那樣嗅探“ portlet環境”,不如對UIViewRoot instanceof NamingContainer進行檢查,它更加靈活且獨立於portlet。 Mojarra特定的com.sun.faces.namingContainerId也將被刪除。 相反,該值將呈現為<partial-response id="...">以便jsf.js可以從那里提取。

總而言之,如果僅針對基於servlet的環境,那並不是很重要。

根據balusC的評論:

這僅對基於Portlet的應用程序(而非基於Servlet的應用程序)感興趣。 我無法確切解釋其原因以及用途(Portlet / Liferay家伙可能會使用),但是Portlet的特定功能稱為“命名空間參數”。 參見https://web.liferay.com/web/meera.success/blog/-/blogs/liferay-requires-name-spaced-parameters

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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