Liferay 6.1开发学习(十):在Liferay中使用Ajax【转】

一、简单示例

客户端代码编写

1、在Liferay中创建一个简单的Portlet页面,可以取名为ajaxPortlet,具体的创建过程可以参考;http://www.huqiwen.com/2012/09/03/liferay-6-1-development-study-3-portlet-explicate/

2、在liferayajax的请求地址要使用portlet:resourceURLa这样定义:<portlet:resourceURL var="ajaxUrl"/>,而不是普通请求的portletactionURL

3、编辑view.jsp页面,在页面中添加<portlet:resourceURL var="ajaxUrl"/>,引入Jquery的包(使用jqueryajax请求),然后编写一个简单的ajax请求代码。

function ajaxTest(){
 $.post('<%=ajaxUrl%>',{p_p_resource_id:'test1'},function(data){
 $('#message').html(data);
 })
 }

这个代码的意思就是请求一下服务端,然后将得到的结果显示到idmessagehtml元素中。

4、这样客户端的代码就是编写完成。具体的详细代码参看下面中的附件。

服务端代码编写

1、在portlet的控制类中重写serveResource方法。

2、在此方法中添加相应的处理类,此处的处理方法和普通的servlet一样,可以使用下面的代码。

@Override
 public void serveResource(ResourceRequest resourceRequest, ResourceResponse resourceResponse) throws IOException, PortletException {
 
response.setContentType("text/html;charset=UTF-8");
 PrintWriter out = null;
 try {
 out = response.getWriter();
 } catch (IOException e) {
 e.printStackTrace();
 }
 String result = "这是服务端返回的结果信息:";
 out.println(result);
 out.flush();
 out.close();
 super.serveResource(resourceRequest, resourceResponse);
 }

可以看到其实和普通的servlet处理基本上是一模一样。

二、多ajax请求

上面的示例虽然简单,但仔细一想就会发现有一个问题,如果在一个页面中有多个ajax请求怎么办?我们要依靠一个resourceID来区分不同的请求,同样也是分客户端和服务端。

客户端

方法1:在resourceURL里面添加一个属性id,<portlet:resourceURL var="ajaxUrl2" id="test2"/>

方法2:在rsourceURL里面添加一个参数,如:

<portlet:resourceURL var="ajaxUrl1">
 <portlet:param name="p_p_resource_id" value="test1"/>
</portlet:resourceURL>

方法3:在ajax请求时添加相应的参数,如:

function ajaxTest(){
 $.post('<%=ajaxUrl1%>',{p_p_resource_id:'test1'},function(data){
 $('#message').html(data);
 })
 }

方法4:直接在URL里面拼接

服务端

服务端的处理只有一个,取得此resourceID,方法为String resourceID = resourceRequest.getResourceID();然后根据不同的resourceID判断处理不同的ajax请求。返回和一般的处理一样。

其他

在处理返回结果时,如果不想使用普通的servlet的处理方式,可以使用liferayServletResponseUtil.sendFile()方法,此方法主要是用来处理文件的,但用于处理ajax的请求也非常方便。

你可能感兴趣的:(liferay)