2011-08-10 2 views
7

私は、processActionメソッドからの成功メッセージに基づいて、ポートレットのprocessActionメソッドを呼び出すjspファイル内でajaxコールを作成したいと思います。ポートレットのserveResourceメソッド、いくつかの例を挙げてください。 これは正しい方法ではありません。ポートレットでのliferayのためのAjaxリクエストの作成6

+2

あなたは[例]上の一例を見つけることができます[1] [1]:のhttp:/ /stackoverflow.com/questions/7241861/ajax-in-liferay-portlet –

答えて

0

processActionメソッドの成功メッセージに基づいています。 応答時にポートレット・アクションURLをコールすると、通常のレンダー応答が得られます。したがって、すべてのポートレットでページが取得されます。 代わりに、ポートレット2.0リソース提供機能を使用して、応答をリソースとして返す必要があります。

10

ポートレットでは、processAction()メソッドの後に自動的にrenderメソッドが追加されるため、ajaxレスポンスにはrenderメソッドによって生成されたHTMLフラグメントが埋め込まれます。したがって、ポートレットにajaxを書くことはややこしいことです。

私のこのブログを見てください。

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

これは、(JSR-168とJSR-286ポートレットの両方のために)ポートレットでAJAXを実装するためのベストプラクティス何の洞察ビューを提供します。

サンプルポートレットが必要な場合は、ブログの連絡先の詳細から私に連絡できます。私はあなたを助けてくれるでしょう。

おかげ Jignesh

+0

恐ろしい!素晴らしいブログエントリ。 – Will

0

あなたは呼び出し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> 
関連する問題