日期:2014-05-16 浏览次数:20390 次
richfaces封装了jQuery和json,因此我们在richfaces项目中,可以轻松使用这两个ajax元素,而无需第三方的jar包 。
在richfaces下使用json无需额外请求json提供者页面,可以通过a4j:jsFunction控件轻松实现异步请求。
?
流程(请参考附件中的代码):
1.jsf页面通过js向server发起请求:
比如,通过一个anchor的点击,调用js方法:
<a href="#" onclick="loadByJson('4')">Gennaro Gattuso</a>
?
2.a4j:jsFunction控件实现该js方法,接收请求,并提交给java类实例(jsonTest)的指定处理方法(getPlayer):
<a4j:jsFunction name="loadByJson"?
action="#{jsonTest.getPlayer}"?
如果有必要,可以向server传递参数:
<a4j:actionparam name="Param1" assignTo="#{jsonTest.id}"></a4j:actionparam>
?
3.调用java类实例(jsonTest)的指定获取json数据的方法(jsonData):
data="#{jsonTest.jsonData}"?
这里,java代码使用的json是richfaces自带的,这正是其方便之处:
org.richfaces.json.JSONObject? dataToJSON = new JSONObject();
dataToJSON.put("id", data.get("id"));
dataToJSON.put("name", data.get("name"));
dataToJSON.put("number", data.get("number"));
dataToJSON.put("age", data.get("age"));
?
4.刷新jsf界面:
oncomplete="updateFields(data);"
?
5.jQuery的selector处理这个刷新工作:
function updateFields(data){
??jQuery('#datadiv').html(data); ? ? ? ? ? ? ??
??var player = eval("("+ data +")");
??jQuery('#id').html(player.id);
??jQuery('#name').html(player.name);
??jQuery('#number').html(player.number);
??jQuery('#age').html(player.age);
}
?