我已经构建了一个在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。答案 0 :(得分:1)
在渲染阶段(例如在config.jsp中),您无法更改portlet的状态 - 例如我不希望任何属性持续存在。它们可能会一直存在到渲染阶段的末尾,但不会持续到下一个动作调用。从呈现的UI到动作,它们需要成为表单的一部分,而不是请求属性。
您可以将portletpreferences存储为String [],没问题,请参阅getting和setting的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");