2017-08-14 41 views
0

以我的Liferay 7 JSP,我打开启动到Liferay的门户的请求(该portlet变换文本并且将结果发送回用于显示的弹出内部)弹出:带有POST URL的Liferay.Util.openWindow? (为了允许更长的参数)

<liferay-portlet:renderURL 
     portletName="<%= portletId %>" 
     var="uri" 
     windowState="<%=LiferayWindowState.POP_UP.toString()%>"> 
    <portlet:param name="text" value="TEXTPLACEHOLDER" /> 
</liferay-portlet:renderURL> 

<aui:script> 
function transformTextAndShowPopup() { 
    var uri = "<%= uri %>"; 
    uri = uri.replace("TEXTPLACEHOLDER", readTextEnteredByUser()); 

    javascript:Liferay.Util.openWindow({ 
     dialog:{ 
      width: 700, 
      height: 300, 
      resizable: true, 
      modal:false, 
      destroyOnClose: true 
     }, 
     id: "My popup", 
     title: "My popup", 
     uri: uri 
    }); 
</aui:script> 

对于短文本来说,它很好用。

问题:我现在也有处理长文本的要求。我不能再依赖GET参数了,如GET parameters can not be over a few kilobytes。试图推动在极限结果:

The server refused this request because the request URI was too long. 

问:我可以启动一个POST请求Liferay.Util.openWindow?或者以其他方式打开长文本的Liferay弹出窗口? (如30千字节)

+0

ActionURL应默认发布。为什么不使用它? –

+0

@ChrisMaggiulli:可以将ActionURL用作弹出URL吗? –

回答

1

我的建议是显示带有加载图标作为内容的对话框。 然后通过Ajax POST查询将文本发布到actionURL(使用A.io.request或jQuery),一旦完成,您只需将对话框窗体的内容替换为您的ajax查询的结果即可。

+0

是的,这正是我最终做的。缺点是更多的网络流量和更多的用户等待时间。如果POST需要时间来处理,则上面是更好的UI反应性。 –