Server Java 四 :如何在用JSF在服务器端处理Ajax请求

[img]/upload/attachment/72756/6232e13d-d2a2-38ff-b9a7-8281099069a8.jpg[/img]


服务器端的处理才是整个事件的Key,那么我们来看看整个请求,回复的过程,我们通过下面的图看看我们服务器端的代码怎么样才可以plug in进去:

看了这个图您肯定已经明白了,我们有机会得到客户端发送过来的HTTP请求,得到这个请求,得到请求里面的参数,我们就可以捋起袖子,大干一番了。
我们用什么方式去处理呢,最简单的一个方法是自己写一个servlet,在servlet的Dopost方法里面,写上处理这个请求的代码,并且把结果以XML的方式返回回去,那么我们这里用一个简单的例子:

public void doPost(HttpServletRequest req, HttpServletResponse res)
throws java.io.IOException {

String action = req.getParameter("action");
String item = req.getParameter("item");

if ((action != null)&&(item != null)) {

// Add or remove items from the Cart
if ("add".equals(action)) {
cart.addItem(item);

} else if ("remove".equals(action)) {
cart.removeItems(item);

}
}

// Serialize the Cart's state to XML
String cartXml = cart.toXml();

// Write XML to response.
res.setContentType("application/xml");
res.getWriter().write(cartXml);
}

这对于了解服务器端编程的人来说,是最简单不过的了。当然,我们用了JSF框架,肯定不会再通过Servlet技术去做这件事情。我们这里用JSF的PhaseListener进行处理。什么是PhaseListener,我们来看一下PhaseListener的JavaDoc:

public interface PhaseListener


extends java.util.EventListener, java.io.Serializable


An interface implemented by objects that wish to be notified at the beginning and ending of processing for each standard phase of the request processing lifecycle.



原来,这个接口捕捉到每个Request的声明周期,在请求开始处理和请求处理结束时我们可以插入我们自己的代码。这个接口的两个最重要的方法如下:

void afterPhase(javax.faces.event.PhaseEvent event)
Handle a notification that the processing for a particular phase has just been completed. void beforePhase(javax.faces.event.PhaseEvent event)
Handle a notification that the processing for a particular phase of the request processing lifecycle is about to begin.

处理结束和处理开始两个方法,我们可以在这两个方法里面写入我们自己的代码,对用户过来的请求进行处理。
比如,我们可以在afterPhase方法里面,插入下面的代码对数据进行处理:

FacesContext facesContext = phaseEvent.getFacesContext();
ExternalContext externalContext = facesContext.getExternalContext();
Map paramMap = externalContext.getRequestParameterMap();

通过paramMap里面可以得到所有的参数,当然,我们并不是对每一个请求都会进行处理,所以,在客户端Javascript发送Ajax请求得时候,可以添加一个自定义的参数,比如我们前面文档中的ajaxdemo=ajaxdemo参数,这样我们可以判断一下当前是不是我们要处理的请求:

private final static String AJAX_DEMO = "ajaxdemo";

if (! AJAX_DEMO.equals(paramMap.get(AJAX_DEMO)))
return;

接下去的代码,就可以处理我们的各种各样的请求了,我们在这里要举的例子是如何得到当前地图的比例尺。下次讲座再深入探讨吧。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值