Jak v JSTL zjistit, zda má bean určitou vlastnost?
Potřebuji na stránce JSP zjistit, zda má JavaBean určitou vlastnost. Nenašel jsem způsob, jak
to vyřešit pomocí JSTL, přesněji pomocí výrazového jazyka. V některých případech kód
pohledu prochází vrácený model (JavaBeans), ale neví, jakého typu je
bean v modelu. Může například jít o bean pro objekt typu Car nebo House a každý z nich má jiné
vlastnosti, které se mají zobrazit.
Vezměme si tento příklad:
Procházíme kolekci dat modelu a na výstup zapisujeme cenu. Může se ale stát, že daná instance modelu nemá vlastnost price a kód ${foo.price} vyvolá výjimku. Nevím, jak pomocí výrazového jazyka zjistit, zda má bean danou vlastnost, a proto jsem pro tento účel vytvořil jednoduchou značku. Značka používá reflexi, aby zjistila, zda má bean příslušnou vlastnost.
protected int doStartTagInternal() throws Exception {
.
.
.
Field field[] = bean.getClass().getDeclaredFields();
for (int i = 0; i < field.length; i++) {
if(prop.equals(field[i].getName())){
pageContext.setAttribute("hasProperty", prop);
break;
}
}
return SKIP_BODY;
}Jednoduchá úprava předchozího příkladu:
Ještě bych chtěl poznamenat, že možná by bylo lepší definovat funkci pomocí výrazového jazyka JSP, kterou by šlo volat ve výrazu.
Související články
Související epizody CZ Podcastu
- #217 · Ivo Lukačovič
O Windy, JavaScriptu a budování firem.
- #3 · Java 6 SE, Vývoj webových aplikací
Dagi a Filemon o novinkách v Javě 6 a webových frameworcích.
- #1 · Vývojová prostředí v Javě
První díl CZ Podcastu se věnuje vývojovým prostředím pro Javu.