2017-08-14 77 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反應性。 –