JSFのAjaxタグのoneventでbegin/complete/successを使う
PrimeFacesに慣れてしまって、通常のHTMLタグでの記述方法がわからなかったりする点があった…ので、メモ。
Ajaxでリクエスト送信のタイミングやレスポンスが戻るタイミングに何らか(JavaScriptなどで)処理を入れたいことがあります。
今回の自分の例では、テキストのフォーカスアウト時にAjaxで処理を開始してからレスポンスが戻るまでの間に画面操作をブロックしたい。というものでした。
リクエストの送信時にブロックUIを出して、レスポンス受信時にブロックUIを解除する、イメージです。
画面で説明すると
テキストがあって
文字を入力
フォーカスアウトするとAjaxで処理を呼び出して、その間は画面ブロック
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のコンポ)
JSFのAjaxタグのoneventでbegin/complete/successを使う的更多相关文章
- 【转】Ext.ajax.request 中的success和failure
原文链接:Ext.ajax.request 中的success和failure Ajax request对象的success事件表示request过程中没有发生错误,和自己的业务逻辑无关, 如果访问不 ...
- 在jquery的ajax方法中的success中使用return要注意的问题
jquery的ajax方法:在success中使用return:来结束程序的时候,结束的只是success这个方法,也就是说success中的return的作用范围只是success: 如果要想在su ...
- Ajax beforeSend和complete 方法与防止重复提交
$.ajax({ beforeSend: function(){ // Handle the beforeSend event }, complete: function(){ // Handle t ...
- Ajax beforeSend和complete 方法
http://blog.csdn.net/chenjianandiyi/article/details/52274591 .ajax({ beforeSend: function(){ // Hand ...
- Jquery ajax json 不执行success的原因 坑爹
最近在看jQuery的API文档,在使用到jQuery的ajax时,如果指定了dataType为json,老是不执行success回调,而是执行了error回调函数,极度郁闷.后面改为1.2.6版本可 ...
- 超全table功能Datatables使用的填坑之旅--1: 无法渲染表格数据: ajax调用了参数 : success
问题:Datatables: 无法渲染表格数据 原因:datatables的ajax 传了"success":function(){},导致无法渲染数据. ajax 删掉" ...
- 如何给JQ的ajax方法中的success()传入参数?
当时在使用JQuery提供的Ajax技术的时候,我有个需求,就是要给它请求成功后调用的success()方法传入参数: 所以,我就直接这样子写了: <script> function ge ...
- shiro使用ajax登陆实现,success但页面无法跳转的问题
首先:简述一下登陆的后台流程 页面提交——>对应controller中的方法——>对应Realm认证——>controller返回 json 这样,无论成功与否,都有返回值,可以用 ...
- JSF拦截ajax请求并传递参数方法
我们可以利用f:ajax做一些简单的ajax操作,但是遇到复杂的逻辑,它不能简单的去实现,jsf提供了一种方法,可以调用它内部的js方法去实现复杂的逻辑. 首先要在页面引入jsf的js文件: < ...
随机推荐
- PHP 5.3连接sql server 2008 R2
我的机器为: xp sp3 sql server 2008 developer apache 2.2.2 php 5.3 从5.3开始,php就不再提供mssql.dll了,所以要php连接sql ...
- 在WIN32 DLL中使用MFC库遇到的问题
今天写了一个DLL,DLL中用到的一个类里用到的MSXML的COM组件,所以在DLL中要包含afx.h头文件,也就不可避免的要用到MFC的类库了,但在编译时出现了错误:mfcs42d.lib(dllm ...
- 关于PYTHON的反射,装饰的练习
从基本概念,简单例子才能慢慢走到高级一点的地方. 另外,PYTHON的函数式编程也是我很感兴趣的一点. 总体而言,我觉得OOP可以作大的框架和思路,FP能作细节实现时的优雅牛X. ~~~~~~~~~~ ...
- socket关闭动作以及socket状态的总结
主要部分,四次握手: 断开连接其实从我的角度看不区分客户端和服务器端,任何一方都可以调用close(or closesocket)之类的函数开始主动终止一个连接.这里先暂时说正常情况.当调用close ...
- 数据库 MySQL Jdbc JDBC的六个固定步骤
*0 案例: a)在JavaScript中使用正则表达式,在JS中正则表达式的定界符是:// var regexp = /^[0-9]+$/; if(regexp.test(nu ...
- Complete The Pattern #1
Complete The Pattern #1 Task: You have to write a function pattern which creates the following patte ...
- poj3378
统计长度为5的上升序列个数, 容易想到O(n^2)的dp f[k,i]:=Σf[k-1,j] (1<=j<i,a[i]>a[j]) ans:=Σf[5,i] 但是显然会超时,需要考虑 ...
- [原]Unity3D深入浅出 - 光源组件(Light)
Unity中提供了四种光源: Directional light: 方向光,类似太阳的日照效果. Point light: 点光源,类似蜡烛. Spotlight: 聚光灯,类似手电筒. Area L ...
- 在“BindingNavigator”删除数据前弹出确认框的实现
1)先设置DeleteItem为空,不让它调用自动生成的删除代码. 2)然后自己写代码实现,如下: private void bindingNavigatorDeleteItem_Click(obje ...
- 让ie6支持fixed最简单和实用的方法
<!DOCTYPE HTML> <html lang="en-US"> <head> <meta charset="UTF-8& ...