Wicket и Java: изменения на странице не сохраняются - PullRequest
0 голосов
/ 05 мая 2011

Я n00b, когда дело доходит до Wicket, как я начал ранее на этой неделе.То, что я пытаюсь сделать, это отобразить список людей на странице с переключателями, описывающими их пол.Теперь переключатели правильно выбираются при загрузке страницы, однако, когда я отправляю страницу, изменения (если они были сделаны) не сохраняются.Я привык к asp.net MVC, поэтому я знаком с Model Binding, но калитка для меня отчасти чужда и, если честно, документации по этой конкретной проблеме не так много.Так что, если вы, ребята, будете так любезны проверить мой код, я буду очень признателен.Любые комментарии и / или исправления также приветствуются.

.java-код

public class FlightInfo extends WebPage 
{
private static final long serialVersionUID = 1L;

private ListView<GuestInfo> guestRecordListView;

public FlightInfo() {
    this.init();
}

private void init() 
{
    FeedbackPanel feedbackPanel = new FeedbackPanel("flightinfo.errormessages");
    add(feedbackPanel);

    final SearchResponse searchResponse = ((DciSession)super.getSession()).getSearchResponse();

    //Data lists
    guestRecordListView = new ListView<GuestInfo>("guestRecordListView", searchResponse.getObj().getGuestList())
    {
        private static final long serialVersionUID = 1L;
        private static final long MALE = 1L;
        private static final long FEMALE = 2L;

        @Override
        protected void populateItem(ListItem<GuestInfo> item)
        {
            item.add(new Label("guestRecordNameListItem", new PropertyModel<String>(item.getModel().getObject(), "Name")));

            String gender = item.getModel().getObject().getGender();

            IModel genderModel = new PropertyModel<String>(item.getModel(), "Gender");

            final RadioGroup<String> guestTypeRadioGroup = new RadioGroup("radio-passengerType", genderModel);
            item.add(guestTypeRadioGroup);

            final Model mModel = new Model(new PersonGenderXRef(item.getModel().getObject(), MALE));
            final Model fModel = new Model(new PersonGenderXRef(item.getModel().getObject(), FEMALE));
            final Model cModel = new Model(new PersonGenderXRef(item.getModel().getObject(), CHILD));

            guestTypeRadioGroup.add(new Radio("radio-male", mModel));
            guestTypeRadioGroup.add(new Radio("radio-female", fModel));
            guestTypeRadioGroup.add(new Radio("radio-child", cModel));

            if(gender.toUpperCase().equals("M"))
            {
                guestTypeRadioGroup.setModel(mModel);
            }
            else 
            {
                if (gender.toUpperCase().equals("F"))
                {
                    guestTypeRadioGroup.setModel(fModel);                   
                }
                else
                {
                    if (gender.toUpperCase().equals("C"))
                    {
                        guestTypeRadioGroup.setModel(cModel);
                    }
                }

            }
        }
    };

    //Buttons
    Button continueButton = new Button("input.submitChanges");

    Form form = new Form("form.reviewAndEditForm")
    {
        private static final long serialVersionUID = 1L;

        @SuppressWarnings("serial")
        protected void onSubmit()
        {       

            try
            {                       
                List<GuestInfo> guests = (List<GuestInfo>) guestRecordListView.getModelObject();
                List<Person> people = new ArrayList<Person>();
                //Construct people list
                for(int i = 0; i < guests.size(); i++)
                {
                    people.add(guests.get(i).getPerson());
                }
                //Submit request
            }
            catch(Exception e)
            {

            }
        }           
    };
    add(form);

    form.add(continueButton);
    form.add(guestRecordListView);
    form.add(flightRecordListView);
}

private final void saveStuff(ListView<GuestInfo> data)
{
    ListView<GuestInfo> dataview2 = data;
}
}

Другой упомянутый класс

public class PersonGenderXRef implements Serializable
{
/**
 * 
 */
private static final long serialVersionUID = 1L;

private GuestInfo guest;
private long gender;

public PersonGenderXRef(GuestInfo guest, long gender)
{
    this.guest = guest;
    this.gender = gender;
}

public GuestInfo guest()
{
    return this.guest;
}

public void setGuest(GuestInfo guest)
{
    this.guest = guest;
}

public long getGender()
{
    return this.gender;
}

public void setGender(long gender)
{
    this.gender = gender;
}
}

Ивот разметка

                    <table id="guestTable">
                        <tr>
                            <th width="20"><!-- <input id="select_all_guests" type="checkbox" /> --></th>
                            <th width="150"><b>Name</b></th>
                            <th colspan="3"><b>Guest Type<span style="color:red">*</span></b></th>
                        </tr>
                        <tr wicket:id="guestRecordListView">
                            <td width="20"><input type="checkbox" /></td>
                            <td width="150"><span wicket:id="guestRecordNameListItem"></span></td>
                            <wicket:container wicket:id="radio-passengerType">
                                <td width="80"><input wicket:id="radio-male" type="radio" />Male</td>
                                <td width="80"><input wicket:id="radio-female" type="radio" />Female</td>
                            </wicket:container>
                        </tr>
                    </table>

1 Ответ

1 голос
/ 05 мая 2011

Модель RadioGroup должна указывать на свойство базового компонента, которое сохраняется в базе данных.

Например, предположим, у вас есть модель корневого объекта, которая знает, как загрузить и сохранить изменения в базе данных (или изменения сохраняются при отправке формы):

IModel personModel = new PropertyModel<Person>(item.getModel(), "person");

Вы хотите, чтобы радиогруппа была суб-собственностью человека, который является гендерным свойством:

IModel genderModel = new PropertyModel<String>(personModel, "gender")
...