【问题标题】:Missing column header when adding new column to Wicket DefaultDataTable将新列添加到 Wicket DefaultDataTable 时缺少列标题
【发布时间】:2013-12-18 23:38:37
【问题描述】:

我的目标是通过按下按钮将新列添加到现有的 DefaultDataTable。我可以通过这种方式向表格添加列(无需按任何按钮)

columns.add(new PropertyColumn(new Model<String>("First Name"), "name.first"));

一切正常。表格是这样的

First Name   Last Name
----------   ---------
Novak        Djokovic
Rafael       Nadal
David        Ferrer

当我尝试通过按按钮添加新列时出现问题。期望的结果是这样的

First Name   Last Name   Nick Name
----------   ---------   ---------
Novak        Djokovic    Nole
Rafael       Nadal       Rafa
David        Ferrer      Ferru

但我明白了

First Name   Last Name
----------   ---------
Novak        Djokovic    Nole
Rafael       Nadal       Rafa
David        Ferrer      Ferru

如您所见,新的列标题没有出现,我需要显示它。这里有html

<html xmlns:wicket="http://wicket.apache.org/dtds.data/wicket-xhtml1.4-strict.dtd">
    <head>
        <title>DataTable Example</title>
    </head>
    <body>
        <form wicket:id="form">
            <input wicket:id="submit" type="submit" value="submit"/>
        </form>
        <table wicket:id="datatable"></table>
    </body>
</html>

和代码:

public class DataTablePage {        

    final UserProvider userProvider = new UserProvider();
    DefaultDataTable table;
    List<IColumn<?>> columns = new ArrayList<IColumn<?>>();

    public DataTablePage() {
        columns.add(new PropertyColumn(new Model<String>("First Name"), "name.first"));
        columns.add(new PropertyColumn(new Model<String>("Last Name"), "name.last"));

        table = new DefaultDataTable("datatable", columns, userProvider, 10);
        table.setOutputMarkupId(true).setOutputMarkupPlaceholderTag(true);
        add(table);

        Form form = new Form("form");       
        add(form);

        form.add(new AjaxButton("submit") {
             @Override
             protected void onSubmit(AjaxRequestTarget target, Form<?> form) {          
                 columns.add(new PropertyColumn(new Model<String>("Nick Name"), "name.nick"));              
                 if (target != null)
                     target.add(table);                      
             }          
             @Override
             protected void onError(AjaxRequestTarget target, Form<?> form) {}
        });             
    }

    public class UserProvider extends SortableDataProvider {
        private List<Contact> contacts = new ArrayList<Contact>();

        public UserProvider() {
            contacts.add(new Contact(new Name("Novak", "Djokovic", "Nole")));
            contacts.add(new Contact(new Name("Rafael", "Nadal", "Rafa")));
            contacts.add(new Contact(new Name("David", "Ferrer", "Ferru")));
        }

        @Override
        public Iterator iterator(int first, int count) {
            return contacts.subList(first, first + count).iterator();
        }

        @Override
        public int size() {
            return contacts.size();
        }

        public IModel<Contact> model(final Object object) {
            return new AbstractReadOnlyModel<Contact>() {
                @Override
                public Contact getObject() {
                    return (Contact) object;
                }
            };
        }
    }

    class Name implements Serializable {    
        private String firstName;
        private String lastName;
        private String nickName;

        // Constructor, getters and setters
    }

    class Contact implements Serializable {     
        private final Name name;

        // Constructor and getter
    }

提前致谢。

【问题讨论】:

    标签: wicket


    【解决方案1】:

    Wicket 6 对此进行了改进 - 请参阅 WICKET-4596。

    【讨论】:

      猜你喜欢
      • 2018-03-14
      • 2017-09-14
      • 1970-01-01
      • 2021-05-12
      • 2020-11-18
      • 1970-01-01
      • 1970-01-01
      • 2018-10-01
      • 1970-01-01
      相关资源
      最近更新 更多