简体   繁体   English

偏好 - 公司范围的设置在Liferay中不起作用

[英]preferences-company-wide setting does not work in Liferay

I created 2 test portlets, myportlet1 and myportlet2. 我创建了2个测试portlet,myportlet1和myportlet2。 Both descriptions are similiar and looks like this in portlet.xml 这两个描述都是类似的,在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>

and like this in liferay-portlet.xml 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>

the difference is with index. 区别在于指数。

So, as you see, both portlets are not instanceable and set to share their preferences company-wide. 因此,如您所见,这两个portlet都不可实现,并设置为在公司范围内共享其首选项。

Although, the following code shows that each portlet knows only it's own preferences but not other portlet's ones: 虽然,以下代码显示每个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);
}

What did I did wrong? 我做错了什么? Thanks 谢谢

'Problem' is that preferences-company-wide does not tells that preferences will be shared with different portlets. “问题”是preferences-company-wide内的偏好不会告诉偏好将与不同的portlet共享。

It's usage is for sharing preferences within single portlet but in different communities/organizations/user_pages ... (different group id's). 它的用途是在单个portlet中共享首选项,但在不同的社区/组织/ user_pages ...(不同的组ID)中。

To get preferences of another portlet you would have to use 要获得另一个portlet的首选项,您必须使用它

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM