我有2個liferay + springmvc portlet應用程序(2個war文件)。如何在liferay + springmvc中調用另一個Portlet @RenderMapping方法?
第一門戶的portlet類列出了所有可用的類別。點擊分類鏈接後,我將顯示產品(默認頁面)頁面,其中包含來自所選類別的產品列表。我通過PortletSession傳達選定的類別。
在門戶-2,用戶可以添加產品到購物車,並導航到車網頁(這也是在門戶-2)。
現在,如果用戶點擊門戶-1,則餘萬,以顯示產品(默認)頁另一個類別。但是目前發生的情況是,當portlet-1上的類別鏈接被點擊後,購物車頁面被重新渲染,因爲購物車頁面現在在portlet-2上處於活動狀態,這是預期的。
@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()方法。
我該怎麼辦? portlet.xml中
@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
}
配置:
工作就像一個魅力:-)但除了小..讓ProductListingPortlet.handleRenderRequest()方法調用我要補充response.setPortletMode(PortletMode.VIEW);在receiveEvent()方法中。非常感謝。 –