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 8
LambdaModel
)为什么
CompoundPropertyModel
?我认为
PropertyModel
在这里更好(或者甚至更好,Wicket 8
LambdaModel