1

フォームの送信時に保存操作を続行またはキャンセルするための確認ダイアログを表示したい。フォーム内のデータを永続化するためのアクションメソッドを呼び出す保存ボタンのあるフォームがあります。保存ボタンをクリックすると、フォームデータが保持される前にファイルがサーバー側で読み取られます。ファイルのデータはフォームデータに結合され、フォームデータが保持されます。どのファイルを読み取るかを定義するために、フォームからいくつかの値が必要です。今のところ問題ありません。FileNotFoundExceptionがスローされた場合、またはファイルから必要なデータが見つからない場合は、確認ダイアログを表示して、発生したメッセージで保存操作を続行またはキャンセルします。

誰かがこれを処理する方法のいくつかの例やアイデアを持っていますか?a4jを使用する必要がありますか?ありがとう。Rifchfaces3.3.3とSeamframework2.2を使用しています。

4

2 に答える 2

1

最初に、質問のタイトルを修正する必要があります。「送信されたフォームデータの処理」ではなく、検証後に送信されるフォームデータです

今解決策。

たとえば、私のフォームには次のようなものがあります。

  • いくつかのfilelds

  • フィールドを再レンダリングしてdoSomeStuff()アクションを実行するa4j:commandButton

  • フォームを送信するための非表示のh:またはa4j:commandButton。

1-ユーザーはa4j:commandButttonである「偽の」送信ボタンをクリックします。

2-Ajax呼び出しはreRender属性のフィールドを更新します

3-その後、再レンダリングされたフィールド値を使用してメソッドdoSomeStuff()が実行されます

4-最後に、Javascriptが実行されてフォームを送信するかどうかが決まります。

形:

<h:form id="myForm">
<h:inputText id="name" value="#{personHome.person.name}"/>
<h:inputText id="surname" value="#{personHome.person.surname}"/>    

<a:commandButton value="Save" reRender="name, surname" 
            action="#{personHome.doSomeStuff()}" 
            oncomplete="return checkMessage('#{personHome.success}')" 
            id="a4jSave"    />

<h:commandButton id="save" value="Save"
                    action="#{personHome.persist}"
style="visibility:hidden" /> 

</h:form>

JavaScript:

<script  language="javascript">        

           function checkMessage(success) {
                 if(success =='false') 
                 {
                    return confirm('Do you want to submit this form?') ? submitForm() : false;
                 }   else {
                           submitForm ();
             }
             }

            function submitForm() {
                document.getElementById('myForm:save').click(); 
                return false;
            }               

        </script>  
于 2011-09-20T11:56:57.157 に答える
0

はい、a4jを使用する必要があります。

そのようなものを試してください(テストされていませんが、アルゴリズムに従ってください):

<a4j:commandButton  onclick="if(messageHasToBeDisplayed){Richfaces.showModalPanel('modalId');}else{doSomeStuff();}"  />
...
<a4j:jsFunction name="doSomeStuff" action="#{controller.doSomeStuff}" reRender="..."/>

これは、必要に応じてモーダルパネルを表示する方法を示しています。これ以上のコードがなければ、私はあなたをもっと助けることはできませんが、これはあなたを助けるはずだと思います...

于 2011-09-15T08:02:55.473 に答える