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>&nbsp; :</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>&nbsp; :</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>&nbsp; :</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>&nbsp;</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>&nbsp;</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;
    }
}

Reply via email to