Objekte an Taglib übergeben

Status
Nicht offen für weitere Antworten.
T

TheSunToucher

Gast
Hi,

ich habe angefangen angefangen mich mit taglibs zu beschäftigen. Mit Java, Html, servlet und Jsps kenne ich mich schon ein wenig aus. So, hier die Frage:

Wie kann ich in der Seite vorhandene Objekte an meine Tags übergeben? Ein simples Beispiel:

Code:
<%
Object obj = new MyObject();

<mytld:MyTag param="foo"/>

%>

Innerhalb der MyTag-Klasse hätte ich das Objekt "obj" gern zur Verfügung. Am liebsten ohne es als Attribut oder Parameter in das Tag aufzunehmen, also irgendwie bei der Initialisierung oder in den Konstruktor.

Ich hoffe ich konnte mein Anliegen verständlich formulieren. Bin für jeden Tipp Dankbar.

Gruß,
Tim
 
S

SlaterB

Gast
z.B.

<%
Object obj = new MyObject();
pageContext.setAttribut("foo",obj);
%>
<mytld:MyTag param="${pageScope.foo}"/>

wenns es sichlich auch nicht all deinen Anforderung entspricht
(falls es überhaupt läuft)
 
T

TheSunToucher

Gast
hmmm, würde gehen, wobei ich es besser finden würde wenn ich es nicht übergeben muss, also ungefähr so:

Code:
<%
Object obj = new MyObject();
pageContext.setAttribut("foo",obj);
%>
<mytld:MyTag />

und in der Klasse dann einfach mit "getAttribute("foo")" holen. Aber bietet die Taglib-Technik da keine andere Möglichkeit?

Dann hab ich gleich noch eine passende Frage, was ist der Vorteil von Taglibs? Ich kann doch auch einfach folgendes schreiben:

Code:
<%
Object obj = new MyObject();
MyTag myTag = new MyTag(obj);
%>
<%= myTag.doit() %>

Dann hätte ich den Vorteil, dass ich im Constructor übergeben kann was ich will, eine tld-Datei erstellen muss, meine web.xml nicht anpassen usw.
Also irgendwie glaube ich, das ich irgendwas grundsätzliches nicht verstanden habe...
 
T

TheSunToucher

Gast
Irgendwie hab ich das noch nicht hinbekommen. Ich habe mir mal eine Test-Jsp und ein Test-Tag erstellt. Diesem Tag möchte ich ein TextObject übergeben, dabei erhalte ich stets den Fehler:

Code:
org.apache.jasper.JasperException: jsp.error.beans.property.conversion
	org.apache.jasper.runtime.JspRuntimeLibrary.getValueFromPropertyEditorManager(JspRuntimeLibrary.java:885)
	org.apache.jsp.test2_jsp._jspx_meth_os_test_0(test2_jsp.java:93)
	org.apache.jsp.test2_jsp._jspService(test2_jsp.java:68)

Meine JSP:
Code:
<%@ taglib uri="/os" prefix="os" %>
<%@ page import ="de.xyz.taglib.TestObject" %>
<%
	TestObject testObject = new TestObject("Test");
	pageContext.setAttribute("testObject", testObject);
%>
<html>
<body>
	<os:test testObject="${testObject}"/>
</body>
</html>

Hab's auch mit ${pageScope.testObject} probiert.
Das Tag sieht so aus:

Code:
public class TestTag extends TagSupport {

	TestObject testObject = null;

	public int doStartTag() throws JspException {
		try {
			
			JspWriter out = pageContext.getOut();
			out.write(testObject.toString());
			
		} catch (IOException e) {
			throw new JspException(e);
		}
		return SKIP_BODY;
	}

	public TestObject getTestObject() {
		return testObject;
	}

	public void setTestObject(TestObject testObject) {
		this.testObject = testObject;
	}
}

Und im Tld habe ich das so gemacht:
Code:
    <tag>
        <name>test</name>
        <tag-class>de.xyz.taglib.TestTag</tag-class>

        <attribute>
            <name>testObject</name>
            <required>true</required>
            <rtexprvalue>true</rtexprvalue>
        </attribute>
	</tag>

Was mache ich bloß falsch...?
 
S

SlaterB

Gast
kannst du das Objekt in der JSP ausgeben (also ist es überhaupt vorhanden):
<c:eek:ut value="xx ${testObject} yy"/>

evtl. mal toString()-Operation überschreiben mit "Hello World"

---------

alternativ mit einem TestObjekt in der Session versuchen,
dass in einem Servlet sicher gesetzt wird (auch wieder mit Ausgabe testen)

------

im Tag den Typ TestObject durch Object ersetzen und schauen was dort ankommt (Ausgabe),
vielleicht ein String?
 
T

TheSunToucher

Gast
SlaterB hat gesagt.:
kannst du das Objekt in der JSP ausgeben (also ist es überhaupt vorhanden):
<c:eek:ut value="xx ${testObject} yy"/>

evtl. mal toString()-Operation überschreiben mit "Hello World"

Jo, ist vorhanden. ToString hatte ich bereits überschrieben...

SlaterB hat gesagt.:
im Tag den Typ TestObject durch Object ersetzen und schauen was dort ankommt (Ausgabe),
vielleicht ein String?

Das ist ein guter Tipp, werd' ich mal probieren. Ich habe das jetzt erstmal so umgebaut, dass ich mit pageContext.setAttribute das objekt setze und mir im Tag wieder raushole... Nicht so elegant.

Was mir noch fehlt (wie ich bereits geschrieben hatte) ist herauszufinden, wann und wie es von Vorteil ist ein CustomTag stat einen einfachen Methodenaufruf zu verwenden. Ich höre und lese überall das es besser sei, warum das so ist und besser in welchen Fällen steht da nicht... Irgendwie ist die Versuchung groß das mit einem Scriptlet reinzupacken und fertig, da habe ich keine Probleme Objekte zu übergeben.
 
S

SlaterB

Gast
Tags erzeugen doch HTML-Code?, Scriptlets nicht..

wenn du natürlich JSPs nur aus Java-Code schreibst wird dich sicher jeder Tag und jede sonstige unterbrechende HTML/ JSP-Zeile stören,
aber so geht man ja auch nicht vor,

normalerweise hat man nur HTML, JSP-Tags usw,
sowas wie "new MyObject();" habe ich noch nie in einer JSP gemacht
 
T

TheSunToucher

Gast
Naja, das hier:

Code:
<html>
<body>
<%for(...)%>
Text
<% } %>
</body>
</html>

ist doch genau wie:

Code:
<html>
<body>
<customtag:forEach param="...">
Text
</customtag:forEach>
</body>
</html>

Also bevor es Taglibs gab, irgendwann zwischen Servlets und jetzt, war das legitim...
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
R Serverseitige Objekte in JSF Allgemeines EE 0
OnDemand Performance Probleme wegen vieler Objekte Allgemeines EE 3
C Objekte aus EJB an Client schicken Allgemeines EE 6
N Objekte zwischen zwei Application Contexts austauschen Allgemeines EE 19
K Objekte in ein neues Formular laden und dort verändern JSF? Allgemeines EE 8
T Zugriff auf Session-Objekte in JSP Allgemeines EE 2
G Wie Objekte von JSP nach Servlet? Allgemeines EE 4
T Struts und Objekte in Comboboxen Allgemeines EE 4
D JSP - Datenmodell - Objekte speichern Allgemeines EE 6
S Frage zu Taglib und Expression Language Allgemeines EE 5
P JSP <-> Taglib Allgemeines EE 3
M taglib wird nicht gefunden Allgemeines EE 9
M TagLib und Referenzen zwischen Klassen Allgemeines EE 4
G eigene Taglib, Attribut kann auf einaml keine Expressions Allgemeines EE 2
K TagLib mit Java-Code mischen Allgemeines EE 5
I <%@ taglib uri="[url]http://java.sun.com/jsf/html"[/url] p Allgemeines EE 6
T Taglib Definitionen auslagern (JSP) Allgemeines EE 5
M Mailer Taglib Attachment Allgemeines EE 4
G JSP & JSTL welche Taglib nochmal? Allgemeines EE 4
clemson HTML Taglib - mehrere Submit-Buttons & Internationalisie Allgemeines EE 4
N JAAS login() mehrere Parameter an LoginModul übergeben Allgemeines EE 2
H SQL Daten von Webservice an Client übergeben Allgemeines EE 3
S JSP Parameter mit Formular übergeben Allgemeines EE 2
S Session in eine andere Anwendung übergeben Allgemeines EE 2
G Objekt von jsp an set Methode von Bean übergeben! Allgemeines EE 2
C HTTP Link übergeben Allgemeines EE 2
G Objekt an Servlet übergeben - oder Objekt global definieren? Allgemeines EE 4
boxi JSF Parameter für die nächste seite übergeben Allgemeines EE 2
M Wert aus Servlet an normale Klasse übergeben Allgemeines EE 2
Y Java Collection an JavaScript übergeben Allgemeines EE 4
N Liste mit Checkboxen an Servlet übergeben? Allgemeines EE 3
J Servlet Parameter aus web.xml übergeben, wie zugreifen? Allgemeines EE 2
S JSF datatable mit buttons Werte übergeben Allgemeines EE 5
P Value an JSTL mit EL übergeben. Allgemeines EE 2
M Parameter an Applet übergeben Allgemeines EE 5
flashfactor EJB: Wie kann ich ein nicht Serializiertes Object übergeben Allgemeines EE 5
P Umlaute werden falsch übergeben Allgemeines EE 4
P StreamResult an JSP übergeben Allgemeines EE 2
clemson [Struts] Einer Action Parameter übergeben Allgemeines EE 2
P Session Attribute an Klasse übergeben Allgemeines EE 13
G HTML Code an JSP übergeben Allgemeines EE 7
G WEBDAV Resource übergeben Allgemeines EE 12
P String-Array an session Variable übergeben Allgemeines EE 3
B Wert an JSP übergeben Allgemeines EE 11

Ähnliche Java Themen

Neue Themen


Oben