Weisu a écrit :
Hi Gabriel, Could you help me on ValueEncoder? The data is return from
database as a List. My palette component is like this:

<t:palette t:id="districts" encoder="districtEncoder"
model="districtModel"/>

My class is like this:

@Persist
private List districts;
public List getDistricts() {return districts;}

public void setDistricts(List districts) {this.districts = districts;}
        
@Persist
private List districtModel;
public List getDistrictModel() {
        districtModel = getEditService().getDistricts(); //This return a List 
from
database
        return districtModel;
}

public void setDistrictModel(List districtModel) {this.districtModel =
districtModel;}


So how do I define the encoder?

Thanks in advance!

Weisu.


This is how I've done it :

.tml :

<input t:type="Palette" model="groups" selected="groupsOfUser" encoder="groupEncoder" />

Value encoder :

public class GroupValueEncoder implements ValueEncoder<Group> {

   public GroupValueEncoder(parameters...) {
       super();
       ....
   }

   /* (non-Javadoc)
    * @see org.apache.tapestry.ValueEncoder#toClient(java.lang.Object)
    */
   public String toClient(Group group) {
       return Integer.toString(group.getId());
   }

   /* (non-Javadoc)
    * @see org.apache.tapestry.ValueEncoder#toValue(java.lang.String)
    */
   public Group toValue(String group) {
       Group group = retrieveGroupFromId(group);
       return group;
   }

}


Page class :

/** The selected groups. */
@Persist
private List<Group> groupsOfUser;

/** The group encoder (one per user). */
@Persist
private GroupValueEncoder groupEncoder;

/** Called on initialization. */
void setup(int userId) throws SimExplorerException {
groupEncoder = new GroupValueEncoder(parameters);
}

public List<Group> getGroups() {
// fill and return the list with all groups
}

public ValueEncoder<Group> getGroupEncoder() {
    return groupEncoder;
}

Group :
It has to implement hashCode(), as elements in both lists (available and selected) can be different in terms of instance but equals in terms of logic. T5 uses Map internally, so equals and hashCode should be implemented on your class.

--
Gabriel <[EMAIL PROTECTED]>
http://www.codelutin.com
tel : 02 40 50 29 28 / fax : 09 59 92 29 28


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to