2

送信ボタンをクリックしたときに、いくつかのinputTextフィールドのrequiredMessagesを含むポップアップを表示したいと思います。しかし、それらのメッセージがある場合にのみ。oncompleteタグでBean変数とJavaScriptを試してみましたが、正しく機能させることができません。p:dialogにvisible = "true"を入れると、commandButtonから制御しようとしますが、ポップアップは常に表示されます。今、私はこれを持っていますが、ポップアップが表示されることはありません:

<h:inputText id="Scheme" 
            required="true"
            requiredMessage="Required.">
</h:inputText>

<h:commandButton id="submitModify" value="#{msg['systemdetail.modify']}"
             action="#{sistem.modify}"
             oncomplete="if (#{facesContext.maximumSeverity != null}) {dlg1.show();}">
</h:commandButton>

<p:dialog id="popup"
          style="text-align:center"
          widgetVar="dlg1"
          modal="true">  
    <h:messages layout="table"/>
</p:dialog> 

これどうやってするの?前もって感謝します。

4

2 に答える 2

12

on*標準のJSFおよびPrimeFacesは、属性でのリクエストベースのEL評価をサポートしていません。RichFacesはそれをサポートする唯一の人です。その上、標準のJSFには属性<h:commandButton>がまったくありません。oncompleteあなたはおそらくPrimeFacesと混同しています<p:commandButton>

これを実現するには、いくつかの方法があります。

  • 代わりにのvisible属性で条件を確認してください。<p:dialog>

    <p:dialog visible="#{not empty facesContext.messageList}">
    

    または、すべてのメッセージではなく検証メッセージのみを表示する場合

    <p:dialog visible="#{facesContext.validationFailed}">
    

  • <p:commandButton>代わりにPrimeFacesを使用してください。PrimeFacesJSAPIは、オブジェクトを#{facesContext.validationFailed}介して条件もサポートします。args

    <p:commandButton ... oncomplete="if (args.validationFailed) dlg1.show()" />
    
于 2012-05-29T14:33:13.240 に答える
2

どのようなメッセージかを確認する必要がある場合は、これが私がprimefacesで動作させた方法です。Primefaces oncompleteは更新後に呼び出されるため、javascript関数を保持するコンポーネントを更新することにより、実行前に最新の#facesContext.maximumSeverity}値を使用してjavascript関数を再構築できます。

<p:commandButton
    oncomplete="executeAfterUpdate()"
    update="updatedBeforeOnComplete"/>

<h:panelGroup id="updatedBeforeOnComplete">
    <script language="JavaScript" type="text/javascript">
        //
        function executeAfterUpdate(){
            if (#{facesContext.maximumSeverity==null
               or facesContext.maximumSeverity.ordinal=='1'})
            {
                // your code to execute here
                someDialog.show();
            }
        }
        //
    </script>
</h:panelGroup>
于 2012-10-12T17:14:55.617 に答える