# Custom Tag zum Parsen



## Ralf Ueberfuhr (4. Dez 2006)

Ich möchte einen Tag schreiben, der seinen Body nach bestimmten Kriterien rendert, diesen leicht veränderten Body danach aber weiter an die JSP-Engine geben soll. Leider funktioniert das nicht, der Body ist immer leer. Woran liegt es?



```
public class ParseTag extends BodyTagSupport {

	private static final long serialVersionUID = 1L;
	/* *****************************************************
	 *   B O D Y T A G   -   I M P L E M E N T A T I O N   *
	 ***************************************************** */
	public int doAfterBody() throws JspException {
		try {
			final String newBody = new ContentParser().parse(getBodyContent().getString());
			getBodyContent().clear();
			getBodyContent().write(newBody);
		} catch (IOException e) {
			throw new JspException(e);
		} catch (ParseException e) {
			throw new JspException(e);
		};
		return SKIP_BODY;
	}

	public int doEndTag() throws JspException {
		return EVAL_PAGE;
	}

	public int doStartTag() throws JspException {
		return EVAL_BODY_BUFFERED;
	}

}
```

EDIT: Ich habe das Hauptproblem, dass der Body erst von der JSP-Engine gerendert , und dann erst in den BodyContent geschrieben wird. Ich benötige es aber genau andersherum!


----------



## HLX (5. Dez 2006)

Hast du mal doInitBody() ausprobiert?

http://java.sun.com/j2ee/sdk_1.3/techdocs/api/javax/servlet/jsp/tagext/BodyTagSupport.html


----------



## Ralf Ueberfuhr (5. Dez 2006)

Naja, bei doInitBody ist der BodyContent noch leer. (Wundert mich auch.)

Hier mal meine Testumgebung:
WebSphere Application Server 6.1 Testumgebung, integriert im Rational Software Architect V7 Open Beta
(funktioniert aber auch nicht unter V6.0.1.1)


----------



## Ralf Ueberfuhr (5. Dez 2006)

Nur so eine Verständnisfrage: Ist es überhaupt möglich, z.B. per EL eine Zeichenkette in die JSP zu inkludieren, sodass - falls diese Zeichenkette weitere JSP-Tags enthält, diese ebenfalls übersetzt werden?

Meiner Meinung nach nicht, denn die JSP wird nur einmal übersetzt, und nicht dynamisch zur Laufzeit, korrekt?

Ein <jsp:include url="IrgendEinServlet"> würde also nur das Ergebnis, das das Servlet herausgibt, darstellen, nicht etwa nochmal rendern, korrekt?

Ich vermute, ich muss meinen eigenen Renderer dafür schreiben...


----------

