2017-10-25 4 views
1

Guten Tag! ich einige Tabelle erstellen:Apache Wicket TextField

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>"); 
       } 
      }); 

     } 

Wenn ich auf Zelle in Tabelle klicken, Zelle Markup "Bearbeiten", erstelle ich einige Panel:

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); 

} 

}

Wie kann ich Wert auf TextField userName = new TextField ("name"); von meinem Modell, oder wenn Model == null, einen beliebigen Text setzen, was ich brauche? Danke!

+2

Da Sie 'CompoundPropertyModel' verwenden, geben Sie den Entity-Namen als Textfeld ein. Wenn Ihr Benutzermodell ein Benutzername ist, sollten Sie' new TextField ("Benutzername") 'angeben, dann verlassen Sie sich nicht auf Felder – soorapadman

Antwort

0

Wenn Sie Wicket 7 oder älter verwenden, dann können Sie verwenden:

TextField<String> userName = new TextField<String>("name", new PropertyModel(model, "username")); 

davon aus, dass username eine Eigenschaft von User ist.

Mit Wicket 8.x können Sie stattdessen LambdaModel verwenden.

+0

Warum das 'CompoundPropertyModel'? Ich denke' PropertyModel' ist hier besser (oder sogar noch besser, das Wicket 8 'LambdaModel') – RobAu

+0

Sie haben Recht! Ich habe meine Antwort korrigiert. –

0

Heyy, Ich denke, das Problem liegt daran, dass Sie das Objekt und nicht das Modell übergeben.

Der richtige Weg ist die Weitergabe mit CompoundPropertyModel, wie Sie es tun. Es ist besser als PropertyModel in diesem Fall.

Versuch dies zu tun:

Sie
... 
    if (model.getObject() == null) { 
     model.setObject(new User()); 
    } 
Form<?> form = new Form("form", new CompoundPropertyModel(model)); 
... 

Hoffnung Hilfe.

Verwandte Themen