2015-11-06 40 views
0

我已经构建了一个在Liferay 6.2上运行的MVCPortlet。 它使用可正常工作的PortletPReferences页面,通过右上角的配置菜单设置/获取字符串首选项参数。通过PortletPreferences(Liferay6.2)处理字符串[]

现在我需要在那里存储一个String []而不是一个普通的String。 这似乎是可能的,你可以存储,并通过

portletPreferences.getValues("paramName", StringArrayData); 

我希望将数据从一个形式存储多选择得到一些的String []。

我假设我需要调用我的派生控制器(从DefaultConfigurationAction派生),并调用有portletPreferences.setValues(String, String[]);

如果是这样,在中间,我将neeed的配置JSP到String []数组传递到控制器通过一个

request.setAttribute(String, String[]); 

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

如果是这样,这里是试图使其工作时,我遇到的问题:

以任何理由,在我的配置JSP,

request.setAttribute("paramName", myStringArray); 

不起作用 - >

actionRequest.getAttribute("paramName") 

在我的控制器中检索到null 这是非常令人惊讶的,因为这通常是有效的。 也许config.jsp的工作方式与标准jsps有点不同。

然后,我怎样才能把我的多行html选择到一个String []属性? 我想要在表单提交时调用JS函数。 这个JS函数会根据select ID(easy) 生成StringArray,然后调用actionURL(更复杂)。 这可能吗?

thx提前。

回答

0

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

这里的“产品”是你的产品阵列。

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

         } 
        } 
}); 

从行动收作方法初探你可以尝试以获取参数:

ParamUtil.getParameterValues(request,"key"); 
1

在渲染阶段(例如,在config.jsp中),你不能改变你的Portlet的状态 - 例如我不希望任何在那里设置的属性持续存在。它们可能会在渲染阶段结束时存活,但不会持续到下一个动作调用。从呈现的UI到动作,他们需要成为表单的一部分,而不是请求属性。

您可以存储portletpreferences作为的String [],没有任何问题,请参阅API为gettingsetting他们

+0

@奥拉夫·科克:是的我看到这些功能,但我不敢肯定我怎么中号应该使用它们。 我拿它setValues需要在控制器中调用请求ajax调用。但它看起来像我们在其他jsps中做的那样,我们无法在设置jsp中进行ajax调用。 我只是从另一个jsp复制一些工作的ajax代码,我将它粘贴到config.jsp(当我们检查portlet配置时弹出),并且ajax不会重定向回控制器。任何想法为什么? –