Layout 删除Liferay布局中嵌入的portlet

Layout 删除Liferay布局中嵌入的portlet,layout,liferay,portlet,Layout,Liferay,Portlet,我知道该规范说明了另一种情况,但是否有任何方法可以删除嵌入在布局中的portlet?假设我在每个页面上都有带有搜索portlet的布局,但我希望它在每个页面上,除了一个页面。 我已经尝试过此主题:,使用 去除 它确实工作了,但要删除的portlet是不必要的,需要呈现并发送给客户机。 我还尝试了以下代码: 但它不能列出嵌入在布局中的portlet;它只遍历我从门户手动添加的portlet。 我以这种方式在布局中添加portlet:$processor.processPortlet3 我在Life

我知道该规范说明了另一种情况,但是否有任何方法可以删除嵌入在布局中的portlet?假设我在每个页面上都有带有搜索portlet的布局,但我希望它在每个页面上,除了一个页面。 我已经尝试过此主题:,使用 去除 它确实工作了,但要删除的portlet是不必要的,需要呈现并发送给客户机。 我还尝试了以下代码:

但它不能列出嵌入在布局中的portlet;它只遍历我从门户手动添加的portlet。 我以这种方式在布局中添加portlet:$processor.processPortlet3 我在Liferay Portal 6.2 GA4中工作。
TIA

是的,当然有一种方法:在该页面上使用不同的布局-最好是不嵌入搜索portlet的布局

还包含特定于页面的CSS显示:无;因为搜索portlet将在某种程度上起作用。是的,portlet将被呈现和发送——但是我们谈论的是什么样的性能影响呢?这有什么可测量的区别吗?如果有:从上面选择选项1。如果没有:不要麻烦

ThemeDisplay themeDisplay = (ThemeDisplay) req.getAttribute(com.liferay.portal.kernel.util.WebKeys.THEME_DISPLAY);
Layout layout = themeDisplay.getLayout();
LayoutTypePortlet layoutTypePortlet = (LayoutTypePortlet) layout.getLayoutType();
List<Portlet> portlets = layoutTypePortlet.getAllPortlets();
for (Portlet portlet : portlets) {
    if(portlet.getPortletId().equalsIgnoreCase(portletToDeleteId)){
        layoutTypePortlet.removePortletId(userId, portletToDeleteId);
        LayoutLocalServiceUtil.updateLayout(layout);
    }
}