掲示板

[NEWBIE] Button um andere JSP aufzurufen

15年前 に Alex B によって更新されました。

[NEWBIE] Button um andere JSP aufzurufen

New Member 投稿: 9 参加年月日: 08/10/19 最新の投稿
Hallo zusammen,

Ich versuche schon seit längerem in der view.jsp einen Button einzubauen, der die view.jsp gegen eine andere JSP-Seite austauscht.


- Geht das überhaupt bei Portlets, die mit Netbeans erstellt wurden?

- In jedem von Liferay mitgelieferten portlet gibt es eine "struts_action". Hat das damit zutun, das es nicht geht?

Bitte helft mir
thumbnail
15年前 に Tobias Amon によって更新されました。

RE: [NEWBIE] Button um andere JSP aufzurufen

Liferay Master 投稿: 546 参加年月日: 07/08/08 最新の投稿
Hallo,

versuchst du allgemein ein JSP-portlet zu erstellen, oder versuchst du gezielt ein Liferay-portlet zu verändern.

Der Unterschied ist:
- Liferay portlets benutzen Struts als Frameworks -> benötugt Struts-kenntnisse
- "Standard JSR 168" Portlets funktionieren auch ohne... die Navigation ist dann "anders"

Gruss
Tobias
15年前 に Alex B によって更新されました。

RE: [NEWBIE] Button um andere JSP aufzurufen

New Member 投稿: 9 参加年月日: 08/10/19 最新の投稿
Erstmal Danke Tobias, das Du mir helfen willst.

Das ist eine Standard JSR 168 bzw. Portlet-Version 2.0 (Netbeans-Plugin). Ich schreibe das extra, weil die xmlns-includes in der web.xml und portlet.xml doch etwas anders sind:

web.xml - aus dem Plugin_SDK
<!--?xml version="1.0" encoding="UTF-8"?-->

<web-app>
</web-app>


web.xml - aus dem Netbeans Portlet Pack

<!--?xml version="1.0" encoding="UTF-8"?-->
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemalocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
...
</web-app>


Ich will mit Hilfe von Netbeans ein Portlet bauen, das ich einfach über den "...\liferay \ deploy"-Ordner einbinden lasse.

Mein Vorgehen:
1. Mit Hilfe des Portal_Pack für Netbeans ein Portlet erzeugt
2. Die 3 xml-Dateien "liferay-display.xml", "liferay-portlet.xml", "liferay-plugin-package" erstellt und diese mit mit den aus dem Plugin_SDK-Werten gefüllt und angepasst (nichts extra hinzugefügt)

3. eine Basic_Settings.jsp im WEB-INF\jsp-Ordner erstellt, auf die die "view.jsp" verweisen soll.

Hier kann die "Weiterleitung" noch ohne Übergabe von Variablen erfolgen.
Wäre aber auch froh, wenn Du mir auch die mit Weiterleitung der Daten erklären kannst.
thumbnail
15年前 に Tobias Amon によって更新されました。

RE: [NEWBIE] Button um andere JSP aufzurufen

Liferay Master 投稿: 546 参加年月日: 07/08/08 最新の投稿
Hallo,

also bei Portlets läuft das etwas anders.

In deiner Portletklasse fügst du eine methode hinzu:
protected void include(String path, RenderRequest req, RenderResponse res)
		throws IOException, PortletException {

		PortletRequestDispatcher prd =
			getPortletContext().getRequestDispatcher(path);

		if (prd == null) {
			_log.error(path + " is not a valid include");
		}
		else {
			prd.include(req, res);
		}
	}


Dann brauchst du in deiner doView-methode einen Aufruf dieser methode und eine Abfrage, was anghezeigt werden soll:

		String jspPage = req.getParameter("jspPage");
		if (jspPage != null) {
			include(jspPage, req, res);
		}
		else {
			super.doDispatch(req, res);
		}


Zuletzt musst du dir in deiner view.jsp noch den link zusammenbauen:
<a href="<portlet:renderUrl><portlet:param name=" jspPage" value="Basic_Settings.jsp"></a>" &gt;LINK


Das ist es dann auch schon.

Gruss Tobias
15年前 に Alex B によって更新されました。

RE: [NEWBIE] Button um andere JSP aufzurufen

New Member 投稿: 9 参加年月日: 08/10/19 最新の投稿
Vielen Dank Tobias Anon,
Du hast mir damit richtig gut weitergeholfen!

Allerdings gingen gewisse Sachen nicht.
Ich musste allerdings ein paar Kleinigkeiten verändern, was ich hier nochmal für alle die nicht mit der EXT arbeiten anbieten will.

in der include-Methode ging folgendes nicht:
  _log.error(path + " is not a valid include"); 

das hab ich ersetzt duch
 System.out.println(path + " is not a valid include");


Portletklasse (der Code in der else-Schleife ist von dem portal_pack für Netbeans generiert worden)
public void [b]doView[/b](RenderRequest request, RenderResponse response) 
   [color=#0021FA]throws[/color] PortletException, IOException {

 String jspPage = request.getParameter("jspPage");
       [color=#0021FA]if[/color] (jspPage != [color=#0021FA]null[/color]) {
            include(jspPage, request, response);
        } [color=#0021FA]else[/color] {
           [color=#00B617]//super.doDispatch(request, response);[/color]   [color=#FF0000]geht nicht. weisst Du warum?[/color]
            response.setContentType("text/html");
            PortletRequestDispatcher dispatcher =
                    getPortletContext().getRequestDispatcher("/WEB-INF/jsp/view.jsp");
            dispatcher.include(request, response);
        }
    }

"Das ist dann auch schon alles" <-- Der Spruch ist gut. Ich sitz da schon eionen ganzen Monat dran und wusste nicht wie ich das machen sollte.

Beste Grüße
Alex
thumbnail
15年前 に Tobias Amon によって更新されました。

RE: [NEWBIE] Button um andere JSP aufzurufen

Liferay Master 投稿: 546 参加年月日: 07/08/08 最新の投稿
Hallo,

schön, dass ich helfen kann.

OK, der logger ist log4j, den muss man sich erst noch "erstellen"... Sysout ist nicht so das richtige Instrument für ein produktives Portlet.

Bei "super.doDispatch" kommt es darauf an, von welcher "Portletklasse" dein Portlet ableitet. Ich verwende bspw. javax.portlet.GenericPortlet.

Gruss Tobias Amon
thumbnail
14年前 に Kolja Köster によって更新されました。

RE: [NEWBIE] Button um andere JSP aufzurufen

Regular Member 投稿: 164 参加年月日: 09/05/11 最新の投稿
Tobias Amon:

<a href="<portlet:renderUrl><portlet:param name=" jspPage" value="Basic_Settings.jsp"></a>" &gt;LINK


Wenn ich das ein mein view.jsp schreibe, ist mein Portlet nicht mehr anzeigbar und es gibt eine million Java Errors in der Tomcat console. Hast Du zufällige irgendein HowTo, daß mal erklärt, wie die Kommunikation zwischen JSP und Java.class Datei in Liferay funktioniert? Ich finde nur Codeschnippsle und haufenweise Dinge, die ich in irgendwelche XML Dateien schreiben soll, die bei mir aber anders heißen, bzw. sich nicht im geringsten an die Verzeichnisstruktur halten, die entsteht, wenn man ein minimales Portlet mit dem ant build erstellt.

Gruß
Kolja
thumbnail
14年前 に Kolja Köster によって更新されました。

RE: [NEWBIE] Button um andere JSP aufzurufen

Regular Member 投稿: 164 参加年月日: 09/05/11 最新の投稿
I schrieb es auch schon in einem anderen Thread, aber der Vollständigkeit halber:
Gibt es eine menschenlesbare Dokumentation, wie man ein einfaches Portlet mit der Portlet SDK baut? Alle Beispiele, die ich bisher gefunden habe, nehmen keinen Bezug auf die SDK (die ja aber empfohlen wird sie zur Entwicklung von Portlets zu benutzen), reden von XML-Files, die andere Namen haben, wie die in dem autogenerierten Eclipse Projekt oder die Pfandangeben beinhalten, die einem beim Deployen des Portlets um die Ohren gehauen werden. Alles was ich will, ist ein kleiner Einstieg, wie ich aus dem angezeigten JSP mit der Java .class Datei im Hintergrund rede, und eine Antwort zurückbekommen, aber alle kleinen Beispielfetzen, die ich irgendwo auftreibe, widersprechen sich endweder gegenseitig oder der Struktur im SDK.
Ich bitte um Hilfe, der Einarbeitungaufwand von Liferay ist so, jenseits von allem, was vertretbar ist.

Gruß
Kolja