日期:2014-05-16  浏览次数:20285 次

JSF AJAX 的理解
关于access backing bean的用法,请见http://jsfgroup.group.iteye.com/group/topic/26060#185068
---------------------------------------------
本文是会处于一个不断的编辑状态。
<f:ajax/>的这个就不说了,相信网上有很多的教程
现在我设计的是这么一个场景,点击一个commandLink 或者commandButton 先对用户 提供一个confirm一个函数,如果用户点击确定的话,再执行ajax的操作。
在这里我使用了jsf.ajax.request的函数。我对这个函数的理解就是,这个类似于Java里面的抽象函数,而我们写具体的实现后。触发之后这个函数将是ajax的属性进行嵌入,最后的ajax的功能是jsf内部的js代码,根据我们嵌入的属性,发送一个ajax的代码。
,记住,如果使用这个函数的话,execute一定要标记好trigger这个事件的dom对象,否则具体的actionListener method 在后台是不会执行的。
例如html的代码如下

<h:commandLink id="addPage2" 
	       value="linkajax" 
 	       onclick="return myajax(this,event,'page addPage2','page');" 
	       actionListener="#{test.addPage}"/> 

js代码如下:
function myajax(element,event,exec,target)
{
	var flag = confirm("are you ready to delete it");
	if(flag)
	{
		try{
			jsf.ajax.request(element,event,{execute:exec,render:target});


		}catch(ex){
			alert(ex);
		}
	}
	return false;
}

---------------------------------------------
默认的,我们是可以使用
<h:commandLink>
<f:ajax/>
<f:param/>
</h:commandLink>

的方式.但是在我们使用ajax.request的形式下,怎么向后台传递我们的参数呢。jsf.ajax.request向我们提供了一个params的用法,据一个简单的例子。
首先我们仍然使用的是上面的那个案例。然后我们的javascript的代码修改为

function myajax(element,event,exec,target)
{
	var flag = confirm("are you ready to delete it");
	if(flag)
	{
		try{
			jsf.ajax.request(element,event,{execute:exec,render:target,name:'xxx'});


		}catch(ex){
			alert(ex);
		}
	}
	return false;
}

然后后台,我们就可以使用map来进行访问了。