首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在救生圈+ springmvc中调用另一个portlet @RenderMapping方法?

如何在救生圈+ springmvc中调用另一个portlet @RenderMapping方法?
EN

Stack Overflow用户
提问于 2014-07-24 08:33:20
回答 1查看 2.9K关注 0票数 1

我有2个liferay+springmvc portlet应用程序(2个war文件)。

首先,portlet是分类portlet,它列出了所有可用的类别。当单击类别链接时,我将显示产品(默认页面)页面,其中包含portlet-2中选定类别的产品列表。我正在通过PortletSession交流选定的类别。

在portlet-2中,用户可以将产品添加到cart并导航到cart页面(portlet-2中也是如此)。

现在,如果用户单击portlet-1上的另一个类别,那么我就会显示产品(默认)页面。但是当前发生的事情是在portlet-1上单击一个类别链接,然后重新呈现购物车页面,因为购物车页面现在在portlet-2上是活动的,这是预期的。

代码语言:javascript
复制
@Controller
@RequestMapping("VIEW")
public class CatalogListingPortlet {

    @Autowired
    private CategoryRepository categoryRepository;

    @RenderMapping
    public String handleRenderRequest(RenderRequest request, RenderResponse response, Model model) {
        model.addAttribute("categories", categoryRepository.findAll());
        return "categories";
    }

    @ActionMapping(params = "action=showCategory")
    public void showCategory(ActionRequest request, ActionResponse response) {
        String categoryId = ParamUtil.get(request, "categoryId",StringPool.BLANK);
        request.setAttribute("categoryId", categoryId);
        PortletSession portletSession = request.getPortletSession();
        portletSession.setAttribute("LIFERAY_SHARED_categoryId", categoryId, PortletSession.APPLICATION_SCOPE);
    }
}


@Controller
@RequestMapping("VIEW")
public class ProductListingPortlet
{
    @Autowired
    private CategoryRepository categoryRepository;

    @Autowired ProductRepository productRepository;

    @RenderMapping
    public String handleRenderRequest(RenderRequest request, RenderResponse response, Model model) {
        PortletSession portletSession = request.getPortletSession();
        String categoryId = (String) portletSession.getAttribute("LIFERAY_SHARED_categoryId", PortletSession.APPLICATION_SCOPE);
        Category category = categoryRepository.findOne(Long.parseLong(categoryId));
        List<Product> products = category.getProducts();
        portletSession.setAttribute("PRODUCTS", products);
        return "products";
    }

    @ActionMapping(params = "action=addProductToCart")
    public void addProductToCart(ActionRequest request, ActionResponse response) {
        //logic to add the selected product to cart       
    }

    @RenderMapping(params = "action=checkout")
    public String checkout(RenderRequest request, RenderResponse response, Model model) {
        return "checkout";
    }

}

当用户单击portlet-1中的类别链接时,我希望调用portlet-2中的@RenderMapping方法。

具体而言,从CatalogListingPortlet.showCategory()方法出发,我需要触发ProductListingPortlet.handleRenderRequest()方法。

我该怎么做呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-07-24 08:46:44

您可以通过IPC (Inter )在Portlet之间发送数据:

在CatalogListingPortlet中:

代码语言:javascript
复制
@ActionMapping(params = "action=showCategory")
public void showCategory(ActionRequest request, ActionResponse response) {
    QName qname = new QName("http://liferay.com/events","ipc.messsage","x");
    response.setEvent(qname, "some message");
}

在ProductListingPortlet中:

代码语言:javascript
复制
@EventMapping(value ="{http://liferay.com/events}ipc.messsage")
public void receiveEvent(EventRequest request, EventResponse response) {
    Event event = request.getEvent();
    String messsage = (String)event.getValue();
    //process the message
}

Portlet.xml中的配置:

代码语言:javascript
复制
<portlet>
    <portlet-name>catalogListingPortlet</portlet-name>
    ...
    <supported-publishing-event>
        <qname xmlns:x="http://liferay.com/events">x:ipc.messsage</qname>
    </supported-publishing-event>
</portlet>
<portlet>
    <portlet-name>productListingPortlet</portlet-name>
    ...
    <supported-processing-event>
        <qname xmlns:x="http://liferay.com/events">x:ipc.messsage</qname>
    </supported-processing-event>
</portlet>

<event-definition>
    <qname xmlns:x="http://liferay.com/events">x:ipc.messsage</qname>
    <value-type>java.lang.String</value-type>
</event-definition>
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24928804

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档