[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