码迷,mamicode.com
首页 > Web开发 > 详细

JSFのAjaxタグのoneventでbegin/complete/successを使う

时间:2014-06-30 23:04:02      阅读:232      评论:0      收藏:0      [点我收藏+]

标签:style   http   java   strong   width   art   

PrimeFacesに慣れてしまって、通常のHTMLタグでの記述方法がわからなかったりする点があった…ので、メモ。

Ajaxでリクエスト送信のタイミングやレスポンスが戻るタイミングに何らか(JavaScriptなどで)処理を入れたいことがあります。

今回の自分の例では、テキストのフォーカスアウト時にAjaxで処理を開始してからレスポンスが戻るまでの間に画面操作をブロックしたい。というものでした。

リクエストの送信時にブロックUIを出して、レスポンス受信時にブロックUIを解除する、イメージです。

画面で説明すると

テキストがあって

bubuko.com,布布扣

文字を入力

bubuko.com,布布扣

フォーカスアウトするとAjaxで処理を呼び出して、その間は画面ブロック

bubuko.com,布布扣

Ajaxのレスポンスが戻った時点でブロックが消えて画面が操作できる流れです。

で、通常こうした処理ではAjaxタグにあるonevent属性を使うようです。
以下、実際にお試しで書いたビュー↓

<?xml version=‘1.0‘ encoding=‘UTF-8‘ ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:p="http://primefaces.org/ui"
      xmlns:pe="http://primefaces.org/ui/extensions"
      xmlns:f="http://java.sun.com/jsf/core"
      xmlns:ui="http://java.sun.com/jsf/facelets">
    <h:head>
        <title>フォーカスブロックのサンプル</title>
    </h:head>
    <h:body>
        <h:form id="frm">
            <!-- PrimeFaces ExtensionのBlockUIコンポーネント -->
            <pe:blockUI target="frm" widgetVar="blc">
                <h:panelGrid columns="2">
                    <p:graphicImage id="imgLoaderBlc" library="images" 
                       name="ajax-loader.gif" width="15px" height="15px"/>
                    <h:outputLabel id="lblBlcProcessing" 
                       value="処理中だよー" style="font-size: 0.6em;"/>
                </h:panelGrid>
            </pe:blockUI>

            <!-- 入力テキストとAjaxによるチェンジイベント -->
            <h:inputText id="txtInput" value="#{indexBean.inputVal}">
                <f:ajax event="change" listener="#{indexBean.calc()}" render="@form" 
                   onevent="focusBlock" />
            </h:inputText>
        </h:form>
        
        <!-- Block UIの呼出し -->
        <script type="text/javascript">
            function focusBlock(data){
                var ajaxStatus = data.status;

                //statusで処理を振り分ける
                switch(ajaxStatus){
                    //beginだったらブロックUIを表示
                    case "begin":
                        blc.block();
                        break;
                    //completeだったらブロックUIを解除
                    case "complete":
                        blc.unblock();
                        break;
                }
            }
        </script>
    </h:body>
</html>

ajaxタグのonevent属性でJavaScriptの処理を呼びますが、その中でstatusをみてbegin/completeの処理を書いてます。同じようにsuccessも使えるようです。

知らなかった…(^^;

ちなみにPrimeFacesを利用しているとJavaScriptの記述が不要でInputTextの部分が以下のように書けます。

<p:inputText id="pTxtInput" value="#{indexBean.inputVal}">
    <p:ajax event="change" listener="#{indexBean.calc()}" update="@form" 
       onstart="blc.block();" oncomplete="blc.unblock();" />
</p:inputText>

PrimeFacesの拡張Ajaxタグだとupdate属性が通常のrender属性にあたり、さらに属性でonstart/oncompleteが指定できます。さらにonsuccessも存在します。

実行すると同じです。(ただし以下はテキストもPrimeFacesのコンポ)

bubuko.com,布布扣

JSFのAjaxタグのoneventでbegin/complete/successを使う,布布扣,bubuko.com

JSFのAjaxタグのoneventでbegin/complete/successを使う

标签:style   http   java   strong   width   art   

原文地址:http://www.cnblogs.com/j3eee/p/3815982.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!