通过PortletPreferences处理String [](Liferay6.2)

时间:2015-11-06 13:31:25

标签: html liferay portlet

我已经构建了一个在Liferay 6.2上运行的MVCPortlet。 它使用PortletPReferences页面,可以通过右上方的配置菜单设置/获取String首选项参数。

现在我需要存储一个String []而不是常规的String。 这似乎是可能的,因为你可以存储并获得一些String []通过

 portletPreferences.getValues("paramName", StringArrayData);

我希望从表单多行选择中存储数据。

我想我需要调用我的派生控制器(派生自DefaultConfigurationAction)并调用portletPreferences.setValues(String, String[]);

如果是这样,在中间,我将需要配置jsp通过

将String []数组传递给控制器
request.setAttribute(String, String[]);

你认为应用程序在理论上可以这样工作吗?

如果是这样,以下是我在尝试使其工作时遇到的问题:

出于任何原因,在我的配置jsp中,

request.setAttribute("paramName", myStringArray);

不起作用 - >

actionRequest.getAttribute("paramName") 

在我的控制器中检索null 这通常很有意思,因为这通常有效。 也许config.jsp与标准jsps有点不同?

然后,如何将多行html选择转换为String []属性? 我提到在提交表单时调用JS函数。 这个JS函数会从select ID生成StringArray(简单) 然后调用actionURL(更复杂)。 有可能吗?

提前thx。

2 个答案:

答案 0 :(得分:1)

在渲染阶段(例如在config.jsp中),您无法更改portlet的状态 - 例如我不希望任何属性持续存在。它们可能会一直存在到渲染阶段的末尾,但不会持续到下一个动作调用。从呈现的UI到动作,它们需要成为表单的一部分,而不是请求属性。

您可以将portletpreferences存储为String [],没问题,请参阅gettingsetting的API

答案 1 :(得分:0)

我想也许你可以在客户端使用数组,并且当用户选择新值时你可以更新javascript数组。 所以你有javascript数组,然后当用户点击动作时,你也可以从javascript执行动作,如下所示:

此处“产品”是您产品的阵列。

A.io.request(url, {type: 'POST',
                    data: {
                        key: products
                    },
                    on: {
                        success: function(event, id, obj) {

                        }
                    }
});

从Action methd你可以尝试获取参数:

ParamUtil.getParameterValues(request,"key");