Sziasztok,
Az alábbi kódban ha a "condition" nem teljesül, tehát SKIP_BODY következik be, az EVAL_PAGE nem fut le. Azért, mert akkor a doEndTag sem fut le? Ha igen, hogyan lehet megoldani, hogy mégis meglegyen az EVAL_PAGE? Ebben a témakörben eléggé új vagyok :)
Azt szeretném elérni, ha ebből nem derülne ki, hogy a JSP-mben feltétel alapján írok ki valamit vagy sem.:
{px:mytag someParam="ertekeldki"}ha az átadott érték a tag-ben megadott feltételeknek megfelel, ezt kiírom szépen{/px:mytag}
(hiába tettem code blokkba, nem jelent meg a kacsacsőr miatt szóval ezért lett {} :D)
Előre is köszi a válaszokat!
public class SomeHandler extends BodyTagSupport {
private String someParam;
public SomeHandler() {
super();
}
public void setSomeParam(String name) {
someParam = name;
}
@Override
public int doStartTag() throws JspException {
if (condition) {
return SKIP_BODY;
} else {
return EVAL_BODY_BUFFERED;
}
}
@Override
public int doEndTag() throws JspException {
try {
if (bodyContent != null) {
bodyContent.writeOut(bodyContent.getEnclosingWriter());
}
} catch (IOException e) {
throw new JspException("Error: " + e.getMessage());
}
bodyContent.clearBody();
return EVAL_PAGE;
}
}
- 971 megtekintés
Hozzászólások
Te a someParam értékének függvényében szeretnél kiíratni valamit? Mert szerintem akkor elég a doStartTag()-et felülírni:
@Override
public int doStartTag() throws JspException {
if (someparam.equals("ertekeldki")) {
try{
JSPWriter out = pageContext.getOut();
out.write("ha az átadott érték a tag-ben megadott feltételeknek megfelel, ezt kiírom szépen");
catch(Exception e) { throw new JSPException(e.getMessage())) }
}
return EVAL_BODY_BUFFERED;
}
U.i.: erősen skicc és már nagyon rég nem használtam TagSupportot :)
- A hozzászóláshoz be kell jelentkezni
a someParam értékének függvényében szeretném kiíratni a body-t vagy sem. Így a pontos :)
Most azt próbálom éppen ki, hogy a doStartTag-ben csak EVAL_BODY_BUFFERED, és a doEndTag-ben valósítom meg a feltételt, aminek függvényében a bodyContent-et vagy kiírom vagy nem, aztán mindig EVAL_BODY
ez így ebben a formában helyes? (hogy működő-e, azt mindjárt kiderítem :))
- A hozzászóláshoz be kell jelentkezni
most ebben a formában működik:
public class SomeHandler extends BodyTagSupport {
private String someParam;
public SomeHandler() {
super();
}
public void setSomeParam(String name) {
someParam = name;
}
@Override
public int doStartTag() throws JspException {
return EVAL_BODY_BUFFERED;
}
@Override
public int doEndTag() throws JspException {
boolean writeOut = false;
if (feltétel) {
writeOut = true;
} else {
writeOut = false;
}
if (writeOut == true) {
try {
if (bodyContent != null) {
bodyContent.writeOut(bodyContent.getEnclosingWriter());
}
} catch (IOException e) {
throw new JspException("Error: " + e.getMessage());
}
}
bodyContent.clearBody();
return EVAL_PAGE;
}
}
De nem csak azt szeretném, hogy működjön, hanem azt is, hogy helyes megoldás legyen, ne gány. Szóval, erről mi a vélemény? :)
- A hozzászóláshoz be kell jelentkezni
import java.io.IOException;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.BodyTagSupport;
public class SomeTag extends BodyTagSupport {
private static final long serialVersionUID = 1L;
private String someParam;
public void setSomeParam(String someParam) {
this.someParam = someParam;
}
@Override
public int doEndTag() throws JspException {
try {
if (someParam.equals("oks")) {
pageContext.getOut().write(getBodyContent().getString());
} else {
pageContext.getOut().write("a megadott paraméter nem oké...");
}
} catch (IOException e) {
throw new JspException(e.getMessage());
}
return EVAL_PAGE;
}
@Override
public void release() {
someParam = null;
super.release();
}
}
Ne kacsacsőrös code-ot hanem szögletes-zárójelescode-ot használj. Amit szeretnél arra ez bőségesen elég ;)
U.i.: Google-be keress rá arra amiből származtatsz(v. implementálsz) és olvasgasd az API-t. Ott le van írva mindenféle hasznos dolog :)
- A hozzászóláshoz be kell jelentkezni
Köszönöm :)
- A hozzászóláshoz be kell jelentkezni