ApacheWicket文本字段
你好! 我创建了一些表格:ApacheWicket文本字段,wicket,textfield,Wicket,Textfield,你好! 我创建了一些表格: List<IColumn<User, String>> columns = new ArrayList<>(); columns.add(new AbstractColumn<User, String>(new Model<String>("")) { @Override public void populateItem(Item<ICellPopulator<
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>");
}
});
}
List columns=new ArrayList();
添加(新抽象列(新模型(“”)){
@凌驾
公共void populateItem(项cellItem、字符串componentId、IModel rowModel){
添加(新链接(组件ID){
@凌驾
公共void onClick(){
System.out.println(“编辑器”+rowModel.getObject().getName());
PageParameters=新的PageParameters();
parameters.add(“id”,rowModel.getObject().getId());
添加(新编辑面板(“面板”,行模型));
}
@凌驾
公共IMarkupFragment getMarkup(){
返回“编辑”的标记;
}
});
}
当我点击单元格进入表格,单元格标记“编辑”时,我创建了一些面板:
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);
}
public类EditPanel扩展面板{
公共编辑面板(字符串id,IModel模型){
超级(id,型号);
User=model.getObject();
if(user==null){
user=新用户();
}
List List=Arrays.asList(UserRole.values());
表单=新表单(“表单”,新的CompoundPropertyModel(用户));
TextField userName=新的TextField(“名称”);
};
添加(新反馈面板(“反馈”);
添加(表格);
添加(用户名);
}
}
如何将值设置为
TextField userName=新的TextField(“名称”);
从我的模型,或者如果model==null,设置我需要的任何文本?
谢谢!如果您使用Wicket 7或更高版本,则可以使用:
TextField<String> userName = new TextField<String>("name", new PropertyModel(model, "username"));
TextField userName=new TextField(“name”,新属性模型(“userName”));
假设username
是User
的属性
对于Wicket 8.x,您可以使用
LambdaModel
。如果您使用Wicket 7或更早版本,则可以使用:
TextField<String> userName = new TextField<String>("name", new PropertyModel(model, "username"));
TextField userName=new TextField(“name”,新属性模型(“userName”));
假设username
是User
的属性
使用Wicket 8.x,您可以使用LambdaModel
。Heyy,
我认为问题在于你传递的是对象而不是模型
正确的方法是像您一样使用CompoundPropertyModel。在这种情况下,它比PropertyModel更好
尝试这样做:
...
if (model.getObject() == null) {
model.setObject(new User());
}
Form<?> form = new Form("form", new CompoundPropertyModel(model));
...
。。。
if(model.getObject()==null){
model.setObject(新用户());
}
表单=新表单(“表单”,新复合属性模型(模型));
...
希望能帮助你。嘿,
我认为问题在于你传递的是对象而不是模型
正确的方法是像您一样使用CompoundPropertyModel。在这种情况下,它比PropertyModel更好
尝试这样做:
...
if (model.getObject() == null) {
model.setObject(new User());
}
Form<?> form = new Form("form", new CompoundPropertyModel(model));
...
。。。
if(model.getObject()==null){
model.setObject(新用户());
}
表单=新表单(“表单”,新复合属性模型(模型));
...
希望对您有所帮助。因为您使用的是
CompoundPropertyModel
尝试将实体名称作为文本字段名。也就是说,如果您的用户模型是username,那么您应该指定新文本字段(“username”)
那么您就不需要依赖字段了,因为您使用的是CompoundPropertyModel
尝试将实体名称作为文本字段名。也就是说,如果您的用户模型是username,那么您应该指定新的文本字段(“username”)
那么你就不依赖字段了为什么CompoundPropertyModel
?我认为PropertyModel
在这里更好(甚至更好,Wicket 8LambdaModel
)为什么CompoundPropertyModel
?我认为PropertyModel
在这里更好(或者甚至更好,Wicket 8LambdaModel
)