如何使PrimeFaces p:blockUI動態地阻止某個組件,即EL狀態?PrimeFaces p:blockUI動態阻塞某個組件(在JSF EL條件下)?
使用案例:
在手的條件基本上是一個模式,用戶可以在網頁上:如果有任何超出的碰撞,並且它們目前處於用戶顯示請求,則框導航樹(顯示超出碰撞模式,導航樹被阻止),否則我們處於常規視圖中並且導航樹應該暢通無阻(顯示常規碰撞模式,導航樹未被阻止)。
目前的問題是,當處於「超出模式」時,當狀態更改對話框將狀態更改爲不超出時,頁面會正確呈現/更新爲正常模式,但導航樹上的陰影仍然存在。由於我們現在處於常規模式,因此如果沒有超出的衝突,我需要一些方法來解鎖。
瞭解了嗎? :-)
OK,這裏的bean屬性第一:
/*
* The logic of this method ensures that after status update the
* mode is automatically put back into regular view if no followup
* date exceeded collisions exist.
*/
public boolean isFollowupExceededCollisionsShown()
{
return getFollowupExceededCount() > 0 ? this.followupExceededCollisionsShown : false;
}
1日試:
在透露 一些封鎖屬性VDL文檔http://www.primefaces.org/docs/vdl/3.4/primefaces-p/blockUI.html展望。
<p:blockUI widgetVar="explorerBlocker"
block=":explorer-form"
blocked="#{collisionManager.followupExceededCollisionsShown}" />
但上面卻沒有什麼。
第二次嘗試:
在展示http://www.primefaces.org/showcase/ui/blockUI.jsf來看,客戶端API似乎更足。
當時的想法是取決於ValueExpression按壓狀態變化對話框確定何時調用或者顯示()或隱藏():
<p:dialog id="state-change-dialog"
widgetVar="stateChangeDialog"
modal="true"
appendToBody="true">
<h:form>
<ui:include src="/view/collisionmgmt/collisionStatusChangeGrid.xhtml" />
<h:panelGroup layout="block" styleClass="center-button-panel">
<p:commandButton id="save-button"
icon="ui-icon ui-icon-disk"
value="OK"
action="#{collisionManager.performStatusChange}"
process="@form"
update=":explorer-form:tree :collision-form:period-grid :collision-form:list :collision-form:growl"
oncomplete="stateChangeDialog.hide();" />
<p:commandButton icon="ui-icon ui-icon-close"
value="Cancel"
update=":collision-form:list"
onclick="stateChangeDialog.hide();"
immediate="true" />
</h:panelGroup>
</h:form>
</p:dialog>
當時的想法是,以某種方式延長OK按鈕的的onComplete =「」撥打電話explorerBlocker.show();
或explorerBlocker.hide();
,具體取決於EL #{collisionManager.followupExceededCollisionsShown}
的新值。
有兩種基本類型,我想:
oncomplete="stateChangeDialog.hide(); #{collisionManager.followupExceededCollisionsShown ? 'explorerBlocker.show();' : 'explorerBlocker.hide();' }"
oncomplete="stateChangeDialog.hide(); if (#{collisionManager.followupExceededCollisionsShown}){ explorerBlocker.show(); } else { explorerBlocker.hide(); }"
狀態改變對話框關閉了所有的時間,但上述邏輯是不是在踢
我必須做一些固有的錯誤。這裏。我懷疑OK按鈕的不完整EL表達式在被點擊時不會被重新評估。向更新列表添加@this不會改變任何內容。
update="@this :explorer-form:tree :collision-form:period-grid :collision-form:list :collision-form:growl"
如何對我的問題解決最好,其中「最好」是JSF專用的第一,然後PrimeFaces特定的(理想情況下,在這記錄!)。
是否可以使用blockUI blocked =「#{?}」與EL屬性
感謝