2011-08-10 11 views
7

Chcę wywołać wywołanie ajax w pliku jsp, które wywołuje metodę processAction portletu, na podstawie komunikatu o powodzeniu z metody processAction, potrzebuję wykonać kolejne wywołanie metody portletu serveResource, proszę podać przykłady.Tworzenie zapytania Ajax w portletach dla Liferay 6

+2

Można znaleźć jeden przykład na [przykład] [1] [1]: http://stackoverflow.com/questions/7241861/ajax-in-liferay-portlet –

Odpowiedz

0

na podstawie komunikatu o powodzeniu z metody processAction To nie jest właściwy sposób, aby to zrobić. Podczas wywoływania adresu URL portletu akcji w odpowiedzi uzyskujesz zwykłą odpowiedź renderowania, więc otrzymasz stronę ze wszystkimi portletami. Zamiast tego należy użyć funkcji udostępniania zasobów Portlet 2.0 i zwrócić odpowiedź jako zasób.

10

W portletach metody processAction() automatycznie śledzą metodę renderowania, a zatem odpowiedź ajax zostanie osadzona z fragmentem HTML wygenerowanym metodą renderowania. Więc pisanie ajaxów w portletach jest nieco trudne.

Zobacz mój blog.

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

To daje także wgląd w to, co jest najlepsze praktyki do wdrożenia ajax w portletów (zarówno dla JSR-168 i JSR-286 portletów).

Jeśli potrzebujesz przykładowych portletów, możesz skontaktować się ze mną poprzez dane kontaktowe z bloga. Chętnie ci pomogę.

Dzięki Jignesh

+0

Awesome! Świetny wpis na blogu. – Will

0

Można sprawdzić moje portlet, który ma przykłady zarówno serveResource i processAction metody powołania. Ajax Jquery Portlet

3

This question pracował dla mnie.

Zasadniczo kontroler

@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. 
     } 
    } 
} 

A 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>