2017-08-14 3 views
0

In meinem Liferay 7 JSP, öffne ich ein Popup, das eine Anforderung an einen Liferay Portlet startet (das Portlet den Text umwandelt und sendet das Ergebnis zurück zur Anzeige innerhalb des Popup):Liferay.Util.openWindow mit einer POST-URL? (Um mehr Parameter zu ermöglichen)

<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> 

Es funktioniert super ... für kurze Texte.

PROBLEM: Ich habe jetzt eine Anforderung, auch lange Texte zu behandeln. Ich kann es mir nicht mehr leisten, auf GET-Parameter wie GET parameters can not be over a few kilobytes zu vertrauen. Der Versuch, die Grenze Ergebnisse schieben in:

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

FRAGE: Kann ich starten eine Liferay.Util.openWindow mit einer POST-Anfrage? Oder sonst ein Liferay-Popup mit einem langen Text öffnen? (wie 30 Kilobyte)

+0

ActionURL sollte standardmäßig gepostet werden. Warum nicht das benutzen? –

+0

@ChrisMaggiulli: Kann ActionURL als Popup-URL verwendet werden? –

Antwort

1

Mein Vorschlag ist, den Dialog mit einem Ladesymbol als Inhalt anzuzeigen. Dann poste den Text per Ajax POST-Abfrage an eine actionURL (benutze entweder A.io.request oder jQuery) und wenn du fertig bist, ersetze einfach den Inhalt des Dialogfeld-Body mit den Ergebnissen deiner Ajax-Abfrage.

+0

Ja, genau das habe ich getan. Der Nachteil ist mehr Netzwerkverkehr und mehr Wartezeit für den Benutzer. Upside ist eine bessere UI-Reaktivität, wenn der POST einige Zeit benötigt. –

Verwandte Themen