2011-08-10 30 views
7

我想在我的jsp文件中調用一個調用portlet的processAction方法的ajax調用,基於processAction方法的成功消息我需要再次調用serveResource方法的portlet,請提供一些示例。在portlet中爲liferay發出Ajax請求6

+2

可找到關於[示例]一個示例[1] [1]:HTTP:/ /stackoverflow.com/questions/7241861/ajax-in-liferay-portlet –

回答

0

基於來自processAction方法的成功消息 這不是正確的方法。 在調用Portlet操作URL時,您會得到平常的呈現響應,因此您將獲得包含所有Portlet的頁面。 相反,您應該使用Portlet 2.0資源服務功能,並將您的響應作爲資源返回。

10

在portlet中,processAction()方法自動跟隨render方法,因此ajax響應將嵌入由render方法生成的HTML片段。所以在portlet中編寫ajax有點棘手。

看看我的這個博客。

http://ajax-and-portlets.blogspot.com/2011/09/ajax-best-practice-in-portlets.html

它給一個什麼樣的實現AJAX的portlet(用於JSR-168和JSR-286的portlet)的最佳實踐的洞察力視圖。

如果您想要示例Portlet,可以通過博客中的聯繫人詳細信息與我聯繫。我很樂意爲您提供幫助。

感謝 Jignesh

+0

太棒了!偉大的博客條目。 – Will

0

您可以檢查出我的portlet其中有兩個的serveResource和方法的processAction調用的例子。 Ajax Jquery Portlet

3

This question爲我工作。

基本上,控制器

@Controller 
@RequestMapping("VIEW") // VIEW mapping (as opposed to EDIT) 
public class MyPortlet { 
    @RenderMapping 
    public String handleRenderRequest(RenderRequest request, RenderResponse response) { 
     return "defaultRender"; 
    } 

    @ResourceMapping("myURL") 
    public void handleMyResource(ResourceRequest request, ResourceResponse response) { 
     OutputStream outStream; 
     try { 
      outStream = response.getPortletOutputStream(); 
      ObjectMapper mapper = new ObjectMapper(); 

      mapper.writeValue(outStream, "Hello world!"); 
     } catch (IOException ex) { 
      // TODO : Do something with errors. 
     } 
    } 
} 

而JSP:

<portlet:resourceURL id="myURL" var="myURL"/> 

<script type="text/javascript"> 
    var urlink = "<%= myURL %>"; 
    $.ajax({ 
     url: urlink, 
     cache: false, 
     type: "POST", 
     success: function(jsondata) { 
      console.log(jsondata); 
     } 
    }); 
</script>