Preferences.store() 在 Liferay 6.2 GA2 中抛出 UnsupportedOperationException

Preferences.store() throws UnsupportedOperationException in Liferay 6.2 GA2

我有一个在 6.1 中运行的 JSF portlet。当我升级到 6.2 CE GA2 时,preferences.store() 抛出 UnsupportedOperationException。我得到如下首选项对象:

FacesContext facesContext = FacesContext.getCurrentInstance();
ExternalContext externalContext = facesContext.getExternalContext();

// Get portlet preferences
PortletRequest portletRequest = (PortletRequest) externalContext.getRequest();
PortletPreferences portletPreferences = portletRequest.getPreferences();

而且我在 liferay-portlet.xml 中有以下属性:

<preferences-unique-per-layout>true</preferences-unique-per-layout>
<preferences-owned-by-group>false</preferences-owned-by-group>

我找到了一些相关的线程和错误报告 (https://issues.liferay.com/browse/LPS-42458)。我可以确认,当我拥有 true 时,此代码有效。问题已解决,但我仍然遇到此问题。我还尝试实现该挂钩解决方法,但该接口似乎在 GA2 中发生了变化。

此外,当我使用以下代码获取首选项存储时,store() 无一例外地执行,但似乎它访问的值与我在 post 开头使用代码获得的首选项不同.

FacesContext facesContext = FacesContext.getCurrentInstance();
ExternalContext externalContext = facesContext.getExternalContext();
PortletRequest portletRequest = (PortletRequest) externalContext.getRequest();

// Get portlet preferences
PortletPreferences portletPreferences = null;
try {
    portletPreferences = PortletPreferencesFactoryUtil.getPortletSetup(
                                portletRequest, PortletIdUtil.getPorletId());
} catch (PortalException | SystemException e) {
    e.printStackTrace();
}

if(portletPreferences == null) {
    return;
}

有什么建议吗?

我无法确认界面是否已更改。我没有完全测试,但 LPS-42458 中提到的解决方法对我有效,没有编译器错误。当您在那个被覆盖的服务包装器上修复导入时,请确保选择正确的 SystemException,因为 Liferay 令人困惑地有两个。 com.liferay.portal.kernel.exception.SystemException 需要为我编译代码