2017-09-13 1 views
0

Ich möchte einige Daten aus einer statischen URL in Liferay dienen. Nehmen wir beispielsweise an, dass ein json mit dem geloggten Benutzer von "http://server.com/whatever/user" geliefert werden soll, damit alle Portlets im Projekt ihn lesen können. Im Moment kann ich es mit einem Portlet machen, aber dann muss ich die URL mit dem Konfigurationsfenster einstellen und das mag ich nicht.Liferay statische URL für dynamische Daten

ich gesehen habe, dass ich jsp Dateien mit statischen Inhalten setzen, aber nicht wissen, wie die Informationen der Sitzung zugreifen, Benutzern usw.

URLs scheint etwas ähnliches zu erreichen, aber scheint übermäßig kompliziert und konzentriert, um eine kurze einfache URL zu bekommen, etwas, das mir egal ist.

Also, wie kann ich einige interne Daten in einer statischen URL bekommen (es macht mir nichts aus, wenn es freundlich, lang oder kurz ist, aber immer das gleiche), damit jedes Element eines Liferay-Projekts es lesen kann?

VIERTE EDIT: Ein anderer Weg, um es ...

In meiner Eclipse Ich habe diesen Baum:

/whatever-war/docroot/html/fancy-porlet/list.jsp

Wie greife ich auf dieses JSP in einem Browser zu, ohne das Liferay-Panel zu gehen und das Portlet in die Menüs des Webs zu stellen?

FÜNFTE EDIT: Ich habe nicht die Zeit hatte mehr zu erforschen, aber ich habe dies in meinen Notizen ...

https://server/language/c/portal/layout?p_l_id=plid

Dies geht direkt auf das Portlet, manchmal. PLID kommt von

PortalUtil.getPlidFromPortletId(themeDisplay.getScopeGroupId(), name_of_portlet_and_war) 

Es ist keine Lösung für mich, weil es nicht immer funktioniert. Manchmal erhalten Sie eine numerische Kennung, manchmal erhalten Sie eine Null. Ich wette auf den Namen von Portlet und Krieg ist falsch, so dass es das Portlet nicht findet, aber dann, wie finden Sie den neuen Namen des Portlets? Leider habe ich den Code, aus dem der Name stammt, verworfen, kommt aber von Liferay.

SECHSTE BEARBEITEN: Ich möchte in der Lage sein, eine feste URL aufzurufen, mit einigen Daten innerhalb Liferay, und Informationen basierend auf diesen Daten zurück zu bekommen.

Antwort

1

Es gibt mehrere Aspekte hier:

Jedes Portlet hat bereits Zugriff auf den Benutzer durch eine Anfrage Attribut ThemeDisplay genannt:

ThemeDisplay themeDisplay = (ThemeDisplay) request.getAttribute(WebKeys.THEME_DISPLAY); 

prüfen ThemeDisplay die Schnittstelle für die verschiedenen Optionen, die Sie haben, um zu erhalten die ID oder das Objekt des aktuellen Benutzers

Sie haben nach der JSON-Bereitstellung gefragt - dies muss über Liferay und nicht (direkt) über eine JSP in Ihrer individuellen Webanwendung erfolgen. Der Grund dafür ist, dass jede Anfrage, die von Liferay bearbeitet wird, die Informationen des Benutzers enthält, aber wie jede richtige Webanwendung, ist sie völlig unabhängig von Anfragen, die an eine andere Webanwendung gerichtet sind: Sofern nicht von Liferay eingeschlossen, wird Ihre JSP eine andere Sitzung haben Liferays Sitzung.(Ich hoffe diese Erklärung ergibt Sinn)

Wenn Sie einen ServletFilter-Hook schreiben, haben Sie vielleicht noch nicht den Portalkontext initialisiert (Liferay 6.x war eine Weile für mich, bitte entschuldigen Sie, dass Sie hier vage sind). Wenn Sie sich auf der Portlet-Seite befinden, müssen Sie möglicherweise mehr als erwartet ausführen.

Eine Option, die Sie haben, ist ein Portlet automatisch auf jeder Seite einzubetten (z. B. wenn es bereitgestellt wird, ist es verfügbar). Sie können ein Portlet so konfigurieren, dass es automatisch auf jeder Seite eingefügt wird, z. B. für das Chat-Portlet. Dieses Portlet muss keine Benutzeroberfläche haben, es muss lediglich seine Ressource URL offen legen, so dass Sie es von überall verwenden können.

Allerdings bezweifle ich irgendwie, dass Sie es verwenden, da jedes Portlet die Informationen bereits zur Hand hat. Aber ich könnte auch einfach nicht alle Ihre Anforderungen verstehen ...

+0

Ich brauche nur die kanonische URL zu einem Portlet. Wenn ich die von Liferay generierte URL kopiere, funktioniert es zwar gut, aber es verwendet die URL, die von der Liferay Systemsteuerung angegeben wird, die sich ohne vorherige Ankündigung ändern und die Links unterbrechen kann. – Saiyine

+0

Es gibt keine kanonische "URL zu Portlet". Es hängt davon ab, auf welcher Seite es ist. Sie können jedoch seine Ressource URL auf jeder einzelnen Seite verfügbar machen oder einfach eine verwenden und ihren Namen über eine allgemeine Konfiguration für jedes Portlet angeben. Oder verwenden Sie einfach ThemeDisplay für jedes Portlet. –