どのようにしてPrimeFaces p:blockUIを特定のコンポーネントを動的にブロックするのですか?EL状態ですか?PrimeFaces p:blockUIは、特定のコンポーネントを動的にブロックします(JSF EL条件で)?
のUSE CASE:
手元の条件は基本的にユーザーがページ上で可能なモードです。そこに任意の衝突を超えていると、彼らが現在のユーザーの要求に応じて表示された場合、その後(ナビゲーションツリーをブロックナビゲーションツリーがブロックされていなければなりません(通常の衝突モードを表示、ナビゲーションツリーはブロックされません)。
現在、「超過モード」でステータス変更ダイアログがステータスを超過しない状態に変更すると、ページはレンダリングされ/通常のモードに正しく戻されます。しかし、ナビゲーションツリーの影まだそこにはです。私たちは通常のモードになっているので、これ以上衝突がなくなれば、ブロックを解除する方法が必要です。
わかりましたか? :-)
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;
}
第一試み: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は、より適切なように見えました。
<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の=「」:
アイデアは、ステータス変更]ダイアログボックスで[OK]を押したときのValueExpressionに応じて、ショーのいずれか()または非表示()を呼び出すことでしたEL #{collisionManager.followupExceededCollisionsShown}
の新しい値に応じて、explorerBlocker.show();
またはexplorerBlocker.hide();
を呼び出します。
私が試した二つの基本的なバリエーションがあります。
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と属性
おかげ