Я 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>