Liferay 如何将portlet页面自动分发到不同的环境?

Liferay 如何将portlet页面自动分发到不同的环境?,liferay,liferay-6,portlet,Liferay,Liferay 6,Portlet,我是开发liferay 6.1 portlet的新手。我希望在我的portlet所在的页面中有一个静态url和静态内容。建议使用哪些方法将portlet和页面分发到不同的环境 我希望所有环境尽可能精确地匹配,我更希望所有内容都自动化,因此我希望页面创建也自动化。您可以使用资源导入器,相关文档可在中找到 或者,通过导出页面来创建LAR文件-同样在中描述 您可以从UI或使用以下代码导入LAR文件: public void importPages() { // Define the setti

我是开发liferay 6.1 portlet的新手。我希望在我的portlet所在的页面中有一个静态url和静态内容。建议使用哪些方法将portlet和页面分发到不同的环境

我希望所有环境尽可能精确地匹配,我更希望所有内容都自动化,因此我希望页面创建也自动化。

您可以使用资源导入器,相关文档可在中找到

或者,通过导出页面来创建LAR文件-同样在中描述

您可以从UI或使用以下代码导入LAR文件:

public void importPages() {
    // Define the settings for import - here some examples:
    final Map<String, String[]> params = new HashMap<>();
    addParam(params, PortletDataHandlerKeys.PORTLET_USER_PREFERENCES, true);
    addParam(params, PortletDataHandlerKeys.PORTLET_USER_PREFERENCES_ALL, true);
    addParam(params, PortletDataHandlerKeys.PORTLET_CONFIGURATION, true);
    addParam(params, PortletDataHandlerKeys.PORTLET_CONFIGURATION_ALL, true);
    addParam(params, PortletDataHandlerKeys.PORTLET_ARCHIVED_SETUPS, true);
    addParam(params, PortletDataHandlerKeys.PORTLET_ARCHIVED_SETUPS_ALL, true);
    addParam(params, PortletDataHandlerKeys.PORTLET_DATA, true);
    addParam(params, PortletDataHandlerKeys.PORTLET_DATA_ALL, true);
    addParam(params, PortletDataHandlerKeys.PORTLET_SETUP, true);
        addParam(params, PortletDataHandlerKeys.PORTLET_SETUP_ALL, true);
    addParam(params, PortletDataHandlerKeys.PORTLET_DATA_CONTROL_DEFAULT, true);

    addParam(params, PortletDataHandlerKeys.THEME_REFERENCE, true);
    addParam(params, PortletDataHandlerKeys.LAYOUT_SET_SETTINGS, true);
    addParam(params, PortletDataHandlerKeys.LOGO, true);

    addParam(params, PortletDataHandlerKeys.CATEGORIES, true);
    addParam(params, PortletDataHandlerKeys.RATINGS, true);
    addParam(params, PortletDataHandlerKeys.COMMENTS, true);

    addParam(params, PortletDataHandlerKeys.DELETE_MISSING_LAYOUTS, true);
    addParam(params, PortletDataHandlerKeys.DELETIONS, true);
    addParam(params, PortletDataHandlerKeys.DELETE_PORTLET_DATA, true);

    addParam(params, PortletDataHandlerKeys.USER_ID_STRATEGY, UserIdStrategy.CURRENT_USER_ID);
    addParam(params, PortletDataHandlerKeys.DATA_STRATEGY, PortletDataHandlerKeys.DATA_STRATEGY_MIRROR);

    addParam(params, PortletDataHandlerKeys.PERMISSIONS, true);

    // Import with the current user into the current site (= group)
    ThemeDisplay themeDisplay = (ThemeDisplay) getPortletRequest().getAttribute(WebKeys.THEME_DISPLAY)
    LayoutLocalServiceUtil.importLayouts(themeDisplay.getUserId(), themeDisplay.getHostGroupId(), false, params, inputStreamOfMyLARFile);
}

// Helper method
private static void addParam(final Map<String, String[]> params, final String key, final Object value) {
    params.put(key, new String[] { value.toString() });
}
公共作废导入页(){
//定义导入的设置-以下是一些示例:
final Map params=new HashMap();
addParam(params,PortletDataHandlerKeys.PORTLET_用户_首选项,true);
addParam(params,PortletDataHandlerKeys.PORTLET\u USER\u PREFERENCES\u ALL,true);
addParam(params,PortletDataHandlerKeys.PORTLET_配置,true);
addParam(params,PortletDataHandlerKeys.PORTLET\u配置\u全部,true);
addParam(params,PortletDataHandlerKeys.PORTLET\u存档\u设置,true);
addParam(params,PortletDataHandlerKeys.PORTLET\u归档的\u设置\u全部,true);
addParam(params,PortletDataHandlerKeys.PORTLET_数据,true);
addParam(params,PortletDataHandlerKeys.PORTLET_DATA_ALL,true);
addParam(params,PortletDataHandlerKeys.PORTLET_SETUP,true);
addParam(params,PortletDataHandlerKeys.PORTLET\u SETUP\u ALL,true);
addParam(params,PortletDataHandlerKeys.PORTLET\u数据\u控制\u默认值,true);
addParam(params,PortletDataHandlerKeys.THEME_REFERENCE,true);
addParam(params,PortletDataHandlerKeys.LAYOUT\u SET\u SETTINGS,true);
addParam(params,PortletDataHandlerKeys.LOGO,true);
addParam(params,PortletDataHandlerKeys.CATEGORIES,true);
addParam(参数,PortletDataHandlerKeys.RATINGS,true);
addParam(params,PortletDataHandlerKeys.COMMENTS,true);
addParam(params,PortletDataHandlerKeys.DELETE_MISSING_LAYOUTS,true);
addParam(params,PortletDataHandlerKeys.DELETIONS,true);
addParam(params,PortletDataHandlerKeys.DELETE_PORTLET_DATA,true);
addParam(params,PortletDataHandlerKeys.USER\u ID\u策略,UserIdStrategy.CURRENT\u USER\u ID);
addParam(params,PortletDataHandlerKeys.DATA_策略,PortletDataHandlerKeys.DATA_策略_镜像);
addParam(params,PortletDataHandlerKeys.PERMISSIONS,true);
//与当前用户一起导入到当前站点(=组)
主题显示主题显示=(主题显示)getPortletRequest().getAttribute(WebKeys.THEME\u显示)
LayoutLocalServiceUtil.importLayouts(主题显示.getUserId(),主题显示.getHostGroupId(),false,params,inputStreamOfMyLARFile);
}
//辅助方法
私有静态void addParam(最终映射参数、最终字符串键、最终对象值){
put(键,新字符串[]{value.toString()});
}

在解释有关Liferay的内容时要小心。Liferay中的“布局”是指在Liferay站点的“页面”中放置portlet的模板。你在正确的轨道上吗???@aston这个术语对我来说非常、非常混乱,因此我在解释的时候尽量小心,非常简单。我想创建一个在浏览器看来像一个页面,上面只有一个内容的页面。我希望该页面也有一个静态URL,它的所有操作都将使用ajax。所以本质上是的,创建一个新页面或更新(如果已经存在)。是的,这是可能的,但是在我发布答案之前,我想知道,为什么你不能在UI中添加页面和portlet?您称之为更容易的自动部署,但如果您更改了portlet,则更改将在不重建页面的情况下可见。@TobiasLiefke很好,通过自动部署,我的意思是,当此portlet安装到各种开发环境中,然后进行登台/测试/生产时,我希望此portlet尽可能自动。我们正在使用puppet和其他工具,所以我想我可以在那里实现自动化,或者也可以手工完成。另外,如果我可以避免的话,我不喜欢手工做任何事情。也许你应该问:我如何才能将我的页面分发到不同的环境我的答案是使用LAR导出/导入(也可以自动完成)或资源导入器。因为通常不仅仅是添加portlet。对不起,这看起来很荒谬,或者我没有正确地考虑这一点。重申;我想在安装portlet时创建一个页面并在那里插入一个portlet——这两种方法有什么帮助?LAR看起来像是用于导入/导出数据,这在我的场景中似乎没有用,除非我想错了。有没有办法激发
导入页面()
?怎么用?两者是否真的创建了一个站点页面?我一点也看不出来。我在哪里定义名称
LayoutLocalServiceUtil.addLayout
看起来是我的最佳选择,但我怎么能激发它呢?哈,甚至导入/导出LR文档中的链接看起来都有点相关;'“创建和管理页面”已断开。我看不到您提到的链接,但将“创建和管理页面”输入到我找到的Liferay开发者网络的搜索中-这似乎有效。对于您的第一条评论:在您最初的问题中,您没有问到如何启动“创建页面并插入portlet操作”-所以我假设这部分你已经知道了。您可以在完全相同的位置调用导入页。LAR文件可以包含许多内容,包括一个页面和一个portlet。只需使用您的页面和portlet创建一个站点,然后转到Admin-site Administration-Pages-Public Pages-ExportI我已经创建了一篇帖子,回答您如何在插件启动后立即启动所需的内容: