gpt4 book ai didi

java - Wicket 和 Java : Changes to page do not persist

转载 作者:行者123 更新时间:2023-12-01 15:51:41 25 4
gpt4 key购买 nike

就 Wicket 而言,我是一名 n00b,因为我从本周早些时候开始。我想做的是在页面上显示人员列表,并使用描述其性别的单选按钮。现在,当页面加载时,单选按钮已正确选择,但是当我提交页面时,更改(如果进行了)不会保留。我习惯了 asp.net MVC,所以我熟悉模型绑定(bind),但 wicket 对我来说有点陌生,说实话,没有太多与这个特定问题相关的文档。因此,如果你们愿意检查我的代码,我将非常感激。任何评论和/或修复也将不胜感激。

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

最佳答案

RadioGroup 的模型应该指向持久保存到数据库的基础 bean 上的属性。

例如,假设您有一个根对象的模型,它知道如何加载并将更改保存到数据库(或者更改在表单提交时保存):

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

您希望广播组成为人员的子属性,即性别属性:

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

关于java - Wicket 和 Java : Changes to page do not persist,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5901646/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com