gpt4 book ai didi

java - 公司范围的首选项设置在 Liferay 中不起作用

转载 作者:行者123 更新时间:2023-12-02 08:04:47 26 4
gpt4 key购买 nike

我创建了 2 个测试 portlet:myportlet1 和 myportlet2。两个描述都很相似,在 portlet.xml

中看起来像这样
<portlet>
<portlet-name>myportlet1</portlet-name>
<display-name>MyPortlet1</display-name>
<portlet-class>com.inthemoon.tests.MyPortlet1</portlet-class>
<init-param>
<name>view-jsp</name>
<value>/html/myportlet1/view.jsp</value>
</init-param>
<expiration-cache>0</expiration-cache>
<supports>
<mime-type>text/html</mime-type>
<portlet-mode>VIEW</portlet-mode>
</supports>
<portlet-info>
<title>MyPortlet1</title>
<short-title>MyPortlet1</short-title>
<keywords></keywords>
</portlet-info>
<portlet-preferences>
<preference>
<name>testPreferenceForMyPortlet1</name>
<value>C:\WINDOWS1</value>
</preference>
</portlet-preferences>
<security-role-ref>
<role-name>administrator</role-name>
</security-role-ref>
<security-role-ref>
<role-name>guest</role-name>
</security-role-ref>
<security-role-ref>
<role-name>power-user</role-name>
</security-role-ref>
<security-role-ref>
<role-name>user</role-name>
</security-role-ref>
</portlet>

就像这样在liferay-portlet.xml

<portlet>
<portlet-name>myportlet1</portlet-name>
<icon>/icon.png</icon>
<preferences-company-wide>true</preferences-company-wide>
<instanceable>false</instanceable>
<header-portlet-css>/css/main.css</header-portlet-css>
<footer-portlet-javascript>
/js/main.js
</footer-portlet-javascript>
<css-class-wrapper>myportlet1-portlet</css-class-wrapper>
</portlet>

区别在于索引。

因此,如您所见,这两个 portlet 都不可实例化,并且设置为在公司范围内共享其首选项。

不过,下面的代码表明每个 portlet 只知道它自己的首选项,而不知道其他 portlet 的首选项:

@Override
public void doView(RenderRequest renderRequest,
RenderResponse renderResponse) throws IOException, PortletException {

javax.portlet.PortletPreferences prefs1 = renderRequest.getPreferences();
//com.liferay.portal.model.PortletPreferences prefs2 = PortletPreferencesLocalServiceUtil.

String portletResource = ParamUtil.getString(renderRequest, "portletResource");
if (Validator.isNotNull(portletResource)) {
try {
prefs1 = PortletPreferencesFactoryUtil.getPortletSetup(renderRequest, portletResource);
} catch (SystemException e) {
e.printStackTrace();
}
}

String testPreferenceForMyPortlet1 = prefs1.getValue("testPreferenceForMyPortlet1", "(not set)");
String testPreferenceForMyPortlet2 = prefs1.getValue("testPreferenceForMyPortlet2", "(not set)");

renderRequest.setAttribute("testPreferenceForMyPortlet1", testPreferenceForMyPortlet1);
renderRequest.setAttribute("testPreferenceForMyPortlet2", testPreferenceForMyPortlet2);

renderRequest.setAttribute("prefs1", prefs1);

super.doView(renderRequest, renderResponse);
}

我做错了什么?谢谢

最佳答案

“问题”是 preferences-company-wide 没有告知首选项将与不同的 portlet 共享。

它的用途是在单个 portlet 内但在不同的社区/组织/user_pages ...(不同的组 ID)中共享首选项。

要获取另一个 portlet 的首选项,您必须使用

PortletPreferencesFactoryUtil.getPortletSetup(portletRequest, "another portlet's id");

关于java - 公司范围的首选项设置在 Liferay 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8356189/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com