美好的一天! 我创建了一些表:
List<IColumn<User, String>> columns = new ArrayList<>();
columns.add(new AbstractColumn<User, String>(new Model<String>("")) {
@Override
public void populateItem(Item<ICellPopulator<User>> cellItem, String componentId, IModel<User> rowModel) {
cellItem.add(new Link<String>(componentId) {
@Override
public void onClick() {
System.out.println("editors" + rowModel.getObject().getName());
PageParameters parameters = new PageParameters();
parameters.add("id", rowModel.getObject().getId());
add(new EditPanel("panel", rowModel));
}
@Override
public IMarkupFragment getMarkup() {
return Markup.of("<div wicket:id='cell'> edit </div>");
}
});
}
当我点击单元格进入表格,单元格标记“编辑”时,我创建了一些面板:
public class EditPanel extends Panel {
public EditPanel(String id, IModel<User> model) {
super(id, model);
User user = model.getObject();
if (user == null) {
user = new User();
}
List<UserRole> list = Arrays.asList(UserRole.values());
Form<?> form = new Form("form", new CompoundPropertyModel(user));
TextField<String> userName = new TextField<String>("name");
};
add(new FeedbackPanel("feedback"));
add(form);
form.add(userName);
}
}
如何设置值 TextField userName = new TextField(“name”); 从我的模型,或者如果model == null,设置我需要的任何文本? 谢谢!
答案 0 :(得分:0)
如果您使用Wicket 7或更早版本,则可以使用:
TextField<String> userName = new TextField<String>("name", new PropertyModel(model, "username"));
假设username
是User
的属性。
使用Wicket 8.x,您可以改为使用LambdaModel
。
答案 1 :(得分:0)
Heyy, 我认为问题是因为你传递的是对象而不是模型。
正确的方法是使用CompoundPropertyModel传递,就像你一样。在这种情况下,它比PropertyModel更好。
尝试这样做:
...
if (model.getObject() == null) {
model.setObject(new User());
}
Form<?> form = new Form("form", new CompoundPropertyModel(model));
...
希望能帮到你。