Hi...
i got another problem here, using select component inside a form.
well, when it's on "add" mode....it works to add new entry in the database.
but when i try to edit it ("edit" mode).
the select component didn't showed the selected value but back to normal
condition (ordered list value).
could anyone help me to solve this problem ?
here's my code :
----------------------------------------------------------------------------------------------------------------------------------
*PlayerForm.java*
public class PlayerForm extends BaseFormPage{
@Inject
private IPlayerDao playerDao;
@Inject
private IClubDao clubDao;
@Persist
private Player player;
private Club club;
@Component
private Form playerForm;
private List<Club> clubList;
private String idPlayer;
public IClubDao getClubDao() {
return clubDao;
}
public IPlayerDao getPlayerDao() {
return playerDao;
}
public Player getPlayer() {
return player;
}
public Club getClub() {
return club;
}
public void setClub(Club club) {
this.club = club;
}
public List<Club> getClubList() {
clubList = getClubDao().queryForList("", "");
return clubList;
}
public ClubSelectionModel getClubSelectionModel() {
return new ClubSelectionModel(getClubList());
}
public ValueEncoder<Club> getClubValueEncoder(){
return new ClubValueEncoder(getClubList());
}
void onPrepare(){
if(player == null){
player = new Player();
}
if(club == null){
club = new Club();
}
}
//it's used for back button action, so it's turn back the value into
null
void cleanupRender() {
player = null;
club = null;
}
void onActionFromClear(){
player = null;
playerForm.clearErrors();
}
//submit action, i have to make player back to null
Object onSuccessFromPlayerForm(){
if(getPlayer().getIdPlayer()==null){
getPlayer().setIdPlayer(getIdPrimaryKey().generateId());
getPlayer().setIdClub(getClub().getIdClub());
getPlayerDao().insert(getPlayer());
}else{
getPlayer().setClub(club);
getPlayerDao().update(getPlayer());
}
player = null;
return PlayerGrid.class;
}
void onActivate(String idPlayer){
this.idPlayer = idPlayer;
player = (Player) getPlayerDao().findByPrimaryKey(idPlayer);
}
String onPassivate(){
return idPlayer;
}
}
----------------------------------------------------------------------------------------------------------------------------------
*PlayerForm.tml*
<form t:type="Form" t:id="playerForm">
<t:errors/>
<table class="soria">
<tr>
<td><t:label for="firstNameField"/></td>
<td> :</td>
<td><input t:type="TextField" t:id="firstNameField" value="
Player.firstName"
validate="required,minlength=3" size="20" label="First
Name"/></td>
</tr>
<tr>
<td><t:label for="midNameField"/></td>
<td> :</td>
<td><input t:type="TextField" t:id="midNameField" value="
Player.midName"
size="20" label="Middle Name"/></td>
</tr>
<tr>
<td><t:label for="lastNameField"/></td>
<td> :</td>
<td><input t:type="TextField" t:id="lastNameField" value="
Player.lastName"
validate="required" size="20" label="Last Name"/></td>
</tr>
<tr>
<td><t:label for="clubSelect"/></td>
<td> </td>
<td><t:select t:id="clubSelect" model="clubSelectionModel"
value="club" encoder="clubValueEncoder" label="Club"/></td>
</tr>
<tr>
<td><t:label for="defaultPriceField"/></td>
<td> </td>
<td><input t:type="TextField" t:id="defaultPriceField"
value="Player.defaultPrice"
validate="required" size="20" label="Default
Price"/></td>
</tr>
<tr><td colspan="3"></td></tr>
<tr>
<td colspan="3">
<input type="submit" label="Save" dojoType="
dijit.form.Button" iconClass="dijitEditorIcon dijitEditorIconSave"/>
</td>
</tr>
</table>
</form>
----------------------------------------------------------------------------------------------------------------------------------
*ClubSelectionModel.java*
public class ClubSelectionModel implements SelectModel {
private List<Club> clubList;
public ClubSelectionModel(List<Club> clubList){
this.clubList = clubList;
}
public List<OptionGroupModel> getOptionGroups() {
return getSelectModel().getOptionGroups();
}
public List<OptionModel> getOptions() {
return getSelectModel().getOptions();
}
public void visit(SelectModelVisitor visitor) {
getSelectModel().visit(visitor);
}
public SelectModel getSelectModel() {
List<OptionModel> optionModelList = new ArrayList<OptionModel>();
for(Club club: clubList) {
optionModelList.add(new OptionModelImpl(club.getClubName(),
false, club, new String[0]));
}
return new SelectModelImpl(null, optionModelList);
}
}
----------------------------------------------------------------------------------------------------------------------------------
*ClubValueEncoder.java*
public class ClubValueEncoder implements ValueEncoder<Club> {
private List<Club> clubList;
public ClubValueEncoder(List<Club> clubList) {
this.clubList = clubList;
}
public String toClient(Club club) {
return club.getClubName();
}
public Club toValue(String value) {
for(Club club : clubList){
if(club.getClubName().equals(value)){
return club;
}
}
return null;
}
}