Создание Ajax-запроса в портлетах для liferay 6

Я хочу сделать ajax-вызов внутри моего jsp-файла, который вызывает метод processAction портлета, основываясь на сообщении об успешном завершении метода processAction, мне нужно сделать еще один вызов метода serveResource портлета, пожалуйста, предоставьте несколько примеров.


person user872220    schedule 10.08.2011    source источник
comment
Вы можете найти один пример в минимально воспроизводимом примере[1] [1]: stackoverflow.com/questions/7241861/ajax-in-liferay-portlet   -  person Martin Gamulin    schedule 05.09.2011


Ответы (4)


В портлетах за методами processAction() автоматически следует метод рендеринга, и, следовательно, ответ ajax будет встроен в HTML-фрагмент, сгенерированный методом рендеринга. Так что написать ajax в портлетах немного сложно.

Взгляните на этот мой блог.

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

Он дает представление о том, как лучше всего реализовать ajax в портлетах (как для портлетов JSR-168, так и для портлетов JSR-286).

Если вам нужны образцы портлетов, вы можете связаться со мной, используя контактную информацию из блога. Я буду рад помочь вам.

Спасибо, Джинеш.

person Jignesh Shukla    schedule 29.09.2011

Этот вопрос работал для меня.

По сути, Контроллер

@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>
person Nahuel Barrios    schedule 08.05.2013

на основе сообщения об успехе от метода processAction Это неправильный способ сделать это. При вызове URL-адреса действия портлета в ответ вы получите обычный ответ рендеринга, поэтому вы получите страницу со всеми портлетами. Вместо этого вы должны использовать функцию обслуживания ресурсов Portlet 2.0 и возвращать свой ответ как ресурс.

person mvmn    schedule 09.09.2011

Вы можете ознакомиться с моим портлетом, в котором есть примеры вызова методов serveResource и processAction. портлет Ajax Jquery

person Ravi Kumar Gupta    schedule 11.05.2012