dagblog.
← Archiv

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.

Verze na Medium

Související články

Související epizody CZ Podcastu