Я хочу сделать ajax-вызов внутри моего jsp-файла, который вызывает метод processAction портлета, основываясь на сообщении об успешном завершении метода processAction, мне нужно сделать еще один вызов метода serveResource портлета, пожалуйста, предоставьте несколько примеров.
Создание Ajax-запроса в портлетах для liferay 6
Ответы (4)
В портлетах за методами processAction() автоматически следует метод рендеринга, и, следовательно, ответ ajax будет встроен в HTML-фрагмент, сгенерированный методом рендеринга. Так что написать ajax в портлетах немного сложно.
Взгляните на этот мой блог.
http://ajax-and-portlets.blogspot.com/2011/09/ajax-best-practice-in-portlets.html
Он дает представление о том, как лучше всего реализовать ajax в портлетах (как для портлетов JSR-168, так и для портлетов JSR-286).
Если вам нужны образцы портлетов, вы можете связаться со мной, используя контактную информацию из блога. Я буду рад помочь вам.
Спасибо, Джинеш.
Этот вопрос работал для меня.
По сути, Контроллер
@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>
на основе сообщения об успехе от метода processAction Это неправильный способ сделать это. При вызове URL-адреса действия портлета в ответ вы получите обычный ответ рендеринга, поэтому вы получите страницу со всеми портлетами. Вместо этого вы должны использовать функцию обслуживания ресурсов Portlet 2.0 и возвращать свой ответ как ресурс.
Вы можете ознакомиться с моим портлетом, в котором есть примеры вызова методов serveResource и processAction. портлет Ajax Jquery