答案 0 :(得分:1)
您的问题被标记为 Liferay 6 和 Liferay 7 。这两个版本截然不同。这个答案假设您正在使用 Liferay 6.x ,因为您询问的是DDM portlet 而不是 OSGI 模块。
以编程方式将输入资源设置为默认值作为您选择的文件夹,需要您在文档库显示 portlet中为JSP创建JavaServer Page钩子。我将简要介绍如何在进入细节之前创建JSP钩子。
从命令行终端,导航到Plugins SDK的hooks文件夹。要创建钩子项目,必须执行create脚本。以下是执行脚本时要遵循的格式:
create.[sh|bat] [project-name] "[Hook Display Name]"
在Linux和Mac OS X上,您输入的命令与此示例中的命令类似:
./create.sh doc-lib-disp-hook "Document Library Display Hook"
在Windows上,您输入的命令与此示例中的命令类似:
create.bat doc-lib-disp-hook "Document Library Display Hook"
Liferay IDE的New Project向导和创建脚本在Plugin SDK的hooks文件夹中生成钩子项目。 Plugins SDK会自动将“-hook”附加到项目名称。
您需要安装Apache ANT才能实现此功能。如果需要安装,请参考以下文档。
创建钩子后,在Liferay IDE或Liferay Developers Studio(或Eclipse)中打开它。
你应该看到类似的东西(名字不同)。
现在您已成功创建了一个钩子插件,我们需要覆盖必要的文件。这个钩子特别需要两个文件
我们需要这两个文件在逻辑上遍历这个例子,尽管我们只需要实际覆盖其中一个。
要覆盖JSP,请执行以下步骤
现在您将注意到您具有以下目录结构。
让我们先打开 configuration.jsp 。这是生成您拍摄的屏幕截图的GUI的代码。找到以下代码块。
<aui:field-wrapper label="root-folder">
<div class="input-append">
<liferay-ui:input-resource id="rootFolderName" url="<%= rootFolderName %>" />
<aui:button name="openFolderSelectorButton" value="select" />
<%
String taglibRemoveFolder = "Liferay.Util.removeFolderSelection('rootFolderId', 'rootFolderName', '" + renderResponse.getNamespace() + "');";
%>
<aui:button disabled="<%= rootFolderId <= 0 %>" name="removeFolderButton" onClick="<%= taglibRemoveFolder %>" value="remove" />
</div>
</aui:field-wrapper>
在该块中,您将看到要设置的根文件夹元素。
<liferay-ui:input-resource id="rootFolderName" url="<%= rootFolderName %>" />
正如您所看到的,文件夹的网址默认已设置为变量 rootFolderName 。我们需要找到首次初始化变量的位置。
我们根本不需要修改此文件。我让你包括它并打开它,这样你就可以按照逻辑顺序进行操作。
如果您注意到 configuration.js p文件中的 rootFolderName 未初始化。因此,我们需要调查 init.jsp 文件,因为它是页面顶部的包含。如果您打开该文件,您会注意到以下块。
String portletResource = ParamUtil.getString(request, "portletResource");
if (layout.isTypeControlPanel()) {
portletPreferences = PortletPreferencesLocalServiceUtil.getPreferences(themeDisplay.getCompanyId(), scopeGroupId, PortletKeys.PREFS_OWNER_TYPE_GROUP, 0, PortletKeys.DOCUMENT_LIBRARY, null);
}
long rootFolderId = PrefsParamUtil.getLong(portletPreferences, request, "rootFolderId", DLFolderConstants.DEFAULT_PARENT_FOLDER_ID);
String rootFolderName = StringPool.BLANK;
if (rootFolderId != DLFolderConstants.DEFAULT_PARENT_FOLDER_ID) {
try {
Folder rootFolder = DLAppLocalServiceUtil.getFolder(rootFolderId);
rootFolderName = rootFolder.getName();
}
catch (NoSuchFolderException nsfe) {
}
}
这段代码基本上是说我们要将rootFolderName初始化为空白。但是,如果rootFolderId通过
设置为高于0然后我们将相应地设置rootFolderName。
如果你想默认以编程方式将rootFolderName设置为你选择的文件夹,你可以做一些事情。最简单的方法是获取文件夹的ID并像这样修改代码
long folderIdConstant = 999999L; // place folder id here
long rootFolderId = PrefsParamUtil.getLong(portletPreferences, request, "rootFolderId", folderIdConstant );
这将以编程方式设置默认根文件夹。现在就构建和部署。