Hallo,
ich versuche mir gerade einen eigene TagLibrary zu schreiben, dabei stoße ich auf folgendes Problem:
Ich benötige in einer Struktur wie dieser,
in der li Struktur die Attribute des Darüberliegenden-Elementes, also TemplateHeader. Die Frage die Sich mir Stellt ist wie soetwas zu bewerkstelligen ist? Es gibt zwar eine Methode getParent(), aber bei dieser bekomme ich ein null zurück.
Mein Code für die beiden Tags sieht wie folgt aus:
und
Noch etwas, gibt es eine öglichkeit anzugeben welche Tags folgen müssen? z.B. es müssen 0...1 li Tags in dem Template Tag vorhanden sein?
Gruß
Marc
ich versuche mir gerade einen eigene TagLibrary zu schreiben, dabei stoße ich auf folgendes Problem:
Ich benötige in einer Struktur wie dieser,
Code:
<myjsp:Template name="ganzneu">
<myjsp:li name="Google" value="http://www.google.de" />
</myjsp:Template>
Mein Code für die beiden Tags sieht wie folgt aus:
Code:
public class ListItem extends BodyTagSupport {
private String name;
private String value;
private String tar;
public String getTarget() {
return tar;
}
public void setTarget(String tar) {
this.tar = tar;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
@Override
public int doStartTag() throws JspTagException {
return SKIP_BODY;
}
@Override
public int doAfterBody() throws JspTagException {
return SKIP_BODY;
}
@Override
public int doEndTag() throws JspTagException {
StringBuffer buffer = new StringBuffer();
buffer.append("[*]<a href=\"");
buffer.append(value);
buffer.append("\"");
if (tar != null && !tar.equals("")) {
buffer.append(" target=\"");
buffer.append(tar);
buffer.append("\"");
}
buffer.append(">");
buffer.append(name);
buffer.append("</a>\n");
JspWriter jw = this.pageContext.getOut();
BodyContent out = new BodyContentImpl(jw);
if (out != null) {
try {
out.getEnclosingWriter().write(buffer.toString());
System.out.println("ListItem:" + buffer.toString());
} catch (IOException ex) {
Logger.getLogger(ListItem.class.getName()).log(Level.SEVERE, null, ex);
}
}
this.setBodyContent(out);
return EVAL_PAGE;
}
}
und
Code:
public class Template extends BodyTagSupport {
private String template;
private String title;
public String getTemplate() {
return template;
}
public void setTemplate(String template) {
this.template = template;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
@Override
public int doStartTag() throws JspTagException {
return EVAL_BODY_BUFFERED;
}
@Override
public int doAfterBody() throws JspTagException {
BodyContent bc = this.getBodyContent();
if (bc != null) {
try {
StringBuffer buffer = new StringBuffer();
buffer.append("<html>\n\t<head>\n\t\t<title>");
buffer.append(title);
buffer.append("</title>\n\t</head>\n\t<body>\n");
buffer.append(bc.getString());
buffer.append("\n\t</body>\n</html>");
bc.clearBody();
bc.getEnclosingWriter().write(buffer.toString());
} catch (IOException ex) {
Logger.getLogger(Template.class.getName()).log(Level.SEVERE, null, ex);
}
}
return SKIP_BODY;
}
@Override
public int doEndTag() throws JspTagException {
return EVAL_PAGE;
}
@Override
public void setParent(Tag t) {
super.setParent(t);
System.out.println("Ich war hier"+t);
}
}
Noch etwas, gibt es eine öglichkeit anzugeben welche Tags folgen müssen? z.B. es müssen 0...1 li Tags in dem Template Tag vorhanden sein?
Gruß
Marc