[Java lista] Tapestry PropertySelection
Zsombor
gzsombor at gmail.com
2006. Nov. 22., Sze, 23:35:54 CET
2006. 11. 20, hétfő keltezéssel 20.33-kor Stef ezt írta:
> Raadasul a Kent fele EnjoyWebDevWithTapestry konyvben (melyet
> sikeresen megvettem, es Te is emlegettel), jol lathato a 181. oldalon
> a peldaban, ha beallitja a Locale-t tajvanira, akkor a poplist neki is
> visszaall english-re :-) Tehat az ove sem jo! :-) Nem mintha ez
> engem megnyugtatna...
> Pls. ha valakinek van egy nagyon egyszeru peldaja, mely jol mukodik,
> tehat mondjuk ha a form listener-ben kivalt egy delegate-et, es nem
> all vissza a poplist az elso elemre, hanem megmarad a kivalasztotton,
> kerem ossza meg a lista tagjaival, de az sem baj ha csak velem :-)
>
> Egy biztos, nagyon ugy erzem, hogy a IPropertySelectionModel
> implementacioban kell keresnem a hibat. Ami most nalam igy nez ki
> (kent verzio), opcionalis ertek nelkul:
> public class HelysegSM implements IPropertySelectionModel {
> private List helysegs;
> public HelysegSM(List Helysegs) {
> this.helysegs = Helysegs;
> }
> public int getOptionCount() {
> return helysegs.size();
> }
> public Object getOption(int index) {
> return getHelyseg(index);
> }
> public String getLabel(int index) {
> return getHelyseg(index).getMegnevezes();
> }
> public String getValue(int index) {
> return Integer.toString (index);
> }
> public Object translateValue(String value) {
> return getHelyseg(Integer.parseInt(value)).getId().toString();
> }
> private Helyseg getHelyseg(int index) {
> return (Helyseg) helysegs.get(index);
> }
> }
>
Továbbra is ajánlom, hogy debugolj. Vagy ha azt nem is, akkor legalább
néhány log üzenetet elrejthetnél a kódodban. De legalább az általam
küldött kódot nem kellett volna elrontani. Én ezt irtam:
public Object translateValue(String value) {
if (value==null || value.trim().length()==0) {
return null;
}
int pos = Integer.parseInt(value)-1;
return pos>=0 && pos<instances.size()? instances.get(pos): null;
}
Ebből nem tudom, hogy hogyan lett ez:
public Object translateValue(String value) {
if (value == null || value.trim().length() == 0) {
return null;
}
return Integer.parseInt(value);
}
Ebből persze rögtön látszik is, hogy hol van elrontva az egész :
http://tapestry.apache.org/tapestry4/tapestry/apidocs/org/apache/tapestry/form/IPropertySelectionModel.html#translateValue(java.lang.String)
"Returns the option corresponding to a value. This is used when
interpreting submitted form parameters."
Azaz nem egy Integer objektumot kell visszaadni, hanem azt a POJO-t,
amelyik megfelel ennek a value-nak. Vagy, ha igy jobban tetszik ennek
kell teljesülnie minden index-re:
getOption(index) == translateValue(getValue(index))
üdv
Zsombor
További információk a(z) Javalist levelezőlistáról