Wicket数据表属性列

时间:2012-05-03 05:07:10

标签: java datatable wicket

我在尝试添加指定了sort属性的列时获得了NPE。关于我做错什么的任何想法?

这是班级:

@Entity
@Table(name="checklist_template")
public class CheckListTemplate extends DomainObject implements Comparable<CheckListTemplate>, Serializable {

    private static final long serialVersionUID = 2959377496669050427L;

    @Id
    @GeneratedValue
    private Long id;

    @Column(nullable=false)
    private String name;

    public CheckListTemplate() {}

    public CheckListTemplate(String name) {
        this.name = name;
    }

    //some other attributes, getters, setters etc

}

这是代码:

public class CheckListTemplateDataPanel extends Panel {

    @SpringBean
    public ChecklistTemplateService checklistTemplateService;

    DataTable<CheckListTemplate> table;
    NavigationToolbar navigationToolbar;
    ChecklistTemplateProvider checklistTemplateProvider;

    public CheckListTemplateDataPanel(String id) {
        super(id);

        IColumn[] columns = new IColumn[1];

        columns[0] = new PropertyColumn<CheckListTemplate>(Model.of("Name"), "name", "name"); //this is what generates the exception. if i ignore the third argument, the code works but i get no link to click for sorting

        table = new DataTable<CheckListTemplate>("datatable", columns, checklistTemplateProvider =  new ChecklistTemplateProvider(), 10);
        table.setOutputMarkupId(true);
        table.addBottomToolbar(navigationToolbar = new NavigationToolbar(table));
        table.addTopToolbar(new HeadersToolbar(table, null));
        add(table);

    }

    private class ChecklistTemplateProvider extends SortableDataProvider<CheckListTemplate> {

        public ChecklistTemplateProvider() {
            setSort("name", true);
        }

        @Override
        public Iterator<? extends CheckListTemplate> iterator(int first, int count) {
            return checklistTemplateService.findAll(new PageRequest(table.getCurrentPage(), count)).iterator();

        }

        @Override
        public int size() {
            return safeLongToInt(checklistTemplateService.count());
        }

        @Override
        public IModel<CheckListTemplate> model(CheckListTemplate object) {
            return Model.of(object);
        }

        public void setFilterString(String filterString){
            this.filterString = filterString;
        }
    }

    public static int safeLongToInt(long l) {
        if (l < Integer.MIN_VALUE || l > Integer.MAX_VALUE) {
            throw new IllegalArgumentException
                    (l + " cannot be cast to int without changing its value.");
        }
        return (int) l;
    }
}

这是一个例外:

2012 May 03 13:58:58,480[ERROR] - RequestCycle - Exception in rendering component: [MarkupContainer [Component id = header]]
org.apache.wicket.WicketRuntimeException: Exception in rendering component: [MarkupContainer [Component id = header]]
    at org.apache.wicket.Component.renderComponent(Component.java:2729)
    at org.apache.wicket.MarkupContainer.onRender(MarkupContainer.java:1539)
    at org.apache.wicket.Component.render(Component.java:2521)
    at org.apache.wicket.MarkupContainer.renderNext(MarkupContainer.java:1441)
    at org.apache.wicket.MarkupContainer.renderComponentTagBody(MarkupContainer.java:1604)
    at org.apache.wicket.MarkupContainer.onComponentTagBody(MarkupContainer.java:1528)
    at org.apache.wicket.Component.renderComponent(Component.java:2690)
    at org.apache.wicket.MarkupContainer.onRender(MarkupContainer.java:1539)
    at org.apache.wicket.Component.render(Component.java:2521)
    at org.apache.wicket.markup.repeater.AbstractRepeater.renderChild(AbstractRepeater.java:122)
    at org.apache.wicket.markup.repeater.AbstractRepeater.onRender(AbstractRepeater.java:103)
    at org.apache.wicket.Component.render(Component.java:2521)
    at org.apache.wicket.MarkupContainer.renderNext(MarkupContainer.java:1441)
    at org.apache.wicket.MarkupContainer.renderComponentTagBody(MarkupContainer.java:1604)
    at org.apache.wicket.MarkupContainer.renderAssociatedMarkup(MarkupContainer.java:697)
    at org.apache.wicket.markup.html.panel.Panel.onComponentTagBody(Panel.java:114)
    at org.apache.wicket.Component.renderComponent(Component.java:2690)
    at org.apache.wicket.MarkupContainer.onRender(MarkupContainer.java:1539)
    at org.apache.wicket.Component.render(Component.java:2521)
    at org.apache.wicket.extensions.markup.html.repeater.data.table.DataTable$ToolbarContainer.onRender(DataTable.java:429)
    at org.apache.wicket.Component.render(Component.java:2521)
    at org.apache.wicket.markup.repeater.AbstractRepeater.renderChild(AbstractRepeater.java:122)
    at org.apache.wicket.markup.repeater.AbstractRepeater.onRender(AbstractRepeater.java:103)
    at org.apache.wicket.Component.render(Component.java:2521)
    at org.apache.wicket.MarkupContainer.renderNext(MarkupContainer.java:1441)
    at org.apache.wicket.MarkupContainer.renderComponentTagBody(MarkupContainer.java:1604)
    at org.apache.wicket.MarkupContainer.renderAssociatedMarkup(MarkupContainer.java:697)
    at org.apache.wicket.markup.html.panel.Panel.onComponentTagBody(Panel.java:114)
    at org.apache.wicket.Component.renderComponent(Component.java:2690)
    at org.apache.wicket.MarkupContainer.onRender(MarkupContainer.java:1539)
    at org.apache.wicket.Component.render(Component.java:2521)
    at org.apache.wicket.MarkupContainer.renderNext(MarkupContainer.java:1441)
    at org.apache.wicket.MarkupContainer.renderComponentTagBody(MarkupContainer.java:1604)
    at org.apache.wicket.MarkupContainer.renderAssociatedMarkup(MarkupContainer.java:697)
    at org.apache.wicket.markup.html.panel.Panel.onComponentTagBody(Panel.java:114)
    at org.apache.wicket.Component.renderComponent(Component.java:2690)
    at org.apache.wicket.MarkupContainer.onRender(MarkupContainer.java:1539)
    at org.apache.wicket.Component.render(Component.java:2521)
    at org.apache.wicket.MarkupContainer.renderNext(MarkupContainer.java:1441)
    at org.apache.wicket.MarkupContainer.renderComponentTagBody(MarkupContainer.java:1604)
    at org.apache.wicket.MarkupContainer.onComponentTagBody(MarkupContainer.java:1528)
    at org.apache.wicket.Component.renderComponent(Component.java:2690)
    at org.apache.wicket.MarkupContainer.onRender(MarkupContainer.java:1539)
    at org.apache.wicket.Component.render(Component.java:2521)
    at org.apache.wicket.MarkupContainer.autoAdd(MarkupContainer.java:229)
    at org.apache.wicket.markup.resolver.MarkupInheritanceResolver.resolve(MarkupInheritanceResolver.java:66)
    at org.apache.wicket.markup.resolver.ComponentResolvers.resolve(ComponentResolvers.java:81)
    at org.apache.wicket.MarkupContainer.renderNext(MarkupContainer.java:1445)
    at org.apache.wicket.MarkupContainer.renderComponentTagBody(MarkupContainer.java:1604)
    at org.apache.wicket.MarkupContainer.onComponentTagBody(MarkupContainer.java:1528)
    at org.apache.wicket.Component.renderComponent(Component.java:2690)
    at org.apache.wicket.MarkupContainer.onRender(MarkupContainer.java:1539)
    at org.apache.wicket.Component.render(Component.java:2521)
    at org.apache.wicket.MarkupContainer.autoAdd(MarkupContainer.java:229)
    at org.apache.wicket.markup.resolver.MarkupInheritanceResolver.resolve(MarkupInheritanceResolver.java:73)
    at org.apache.wicket.markup.resolver.ComponentResolvers.resolve(ComponentResolvers.java:81)
    at org.apache.wicket.MarkupContainer.renderNext(MarkupContainer.java:1445)
    at org.apache.wicket.MarkupContainer.renderComponentTagBody(MarkupContainer.java:1604)
    at org.apache.wicket.MarkupContainer.onComponentTagBody(MarkupContainer.java:1528)
    at org.apache.wicket.Component.renderComponent(Component.java:2690)
    at org.apache.wicket.MarkupContainer.onRender(MarkupContainer.java:1539)
    at org.apache.wicket.Component.render(Component.java:2521)
    at org.apache.wicket.MarkupContainer.autoAdd(MarkupContainer.java:229)
    at org.apache.wicket.markup.resolver.MarkupInheritanceResolver.resolve(MarkupInheritanceResolver.java:66)
    at org.apache.wicket.markup.resolver.ComponentResolvers.resolve(ComponentResolvers.java:81)
    at org.apache.wicket.MarkupContainer.renderNext(MarkupContainer.java:1445)
    at org.apache.wicket.MarkupContainer.renderComponentTagBody(MarkupContainer.java:1604)
    at org.apache.wicket.MarkupContainer.onComponentTagBody(MarkupContainer.java:1528)
    at org.apache.wicket.Component.renderComponent(Component.java:2690)
    at org.apache.wicket.MarkupContainer.onRender(MarkupContainer.java:1539)
    at org.apache.wicket.Component.render(Component.java:2521)
    at org.apache.wicket.MarkupContainer.autoAdd(MarkupContainer.java:229)
    at org.apache.wicket.markup.resolver.MarkupInheritanceResolver.resolve(MarkupInheritanceResolver.java:73)
    at org.apache.wicket.markup.resolver.ComponentResolvers.resolve(ComponentResolvers.java:81)
    at org.apache.wicket.MarkupContainer.renderNext(MarkupContainer.java:1445)
    at org.apache.wicket.MarkupContainer.renderComponentTagBody(MarkupContainer.java:1604)
    at org.apache.wicket.MarkupContainer.onComponentTagBody(MarkupContainer.java:1528)
    at org.apache.wicket.Component.renderComponent(Component.java:2690)
    at org.apache.wicket.MarkupContainer.onRender(MarkupContainer.java:1539)
    at org.apache.wicket.Component.render(Component.java:2521)
    at org.apache.wicket.MarkupContainer.autoAdd(MarkupContainer.java:229)
    at org.apache.wicket.markup.resolver.MarkupInheritanceResolver.resolve(MarkupInheritanceResolver.java:66)
    at org.apache.wicket.markup.resolver.ComponentResolvers.resolve(ComponentResolvers.java:81)
    at org.apache.wicket.MarkupContainer.renderNext(MarkupContainer.java:1445)
    at org.apache.wicket.MarkupContainer.renderComponentTagBody(MarkupContainer.java:1604)
    at org.apache.wicket.MarkupContainer.onComponentTagBody(MarkupContainer.java:1528)
    at org.apache.wicket.Component.renderComponent(Component.java:2690)
    at org.apache.wicket.MarkupContainer.onRender(MarkupContainer.java:1539)
    at org.apache.wicket.Component.render(Component.java:2521)
    at org.apache.wicket.MarkupContainer.autoAdd(MarkupContainer.java:229)
    at org.apache.wicket.markup.resolver.MarkupInheritanceResolver.resolve(MarkupInheritanceResolver.java:73)
    at org.apache.wicket.markup.resolver.ComponentResolvers.resolve(ComponentResolvers.java:81)
    at org.apache.wicket.MarkupContainer.renderNext(MarkupContainer.java:1445)
    at org.apache.wicket.MarkupContainer.renderAll(MarkupContainer.java:1555)
    at org.apache.wicket.Page.onRender(Page.java:1594)
    at org.apache.wicket.Component.render(Component.java:2521)
    at org.apache.wicket.Page.renderPage(Page.java:932)
    at org.apache.wicket.request.target.component.BookmarkablePageRequestTarget.respond(BookmarkablePageRequestTarget.java:261)
    at org.apache.wicket.request.AbstractRequestCycleProcessor.respond(AbstractRequestCycleProcessor.java:105)
    at org.apache.wicket.RequestCycle.processEventsAndRespond(RequestCycle.java:1258)
    at org.apache.wicket.RequestCycle.step(RequestCycle.java:1329)
    at org.apache.wicket.RequestCycle.steps(RequestCycle.java:1436)
    at org.apache.wicket.RequestCycle.request(RequestCycle.java:545)
    at org.apache.wicket.protocol.http.WicketFilter.doGet(WicketFilter.java:486)
    at org.apache.wicket.protocol.http.WicketFilter.doFilter(WicketFilter.java:319)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88)
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter.doFilterInternal(OpenEntityManagerInViewFilter.java:113)
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
    at org.apache.catalina.core.StandardContextValve.__invoke(StandardContextValve.java:191)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:859)
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:602)
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
    at java.lang.Thread.run(Thread.java:662)
Caused by: java.lang.NullPointerException
    at org.apache.wicket.extensions.markup.html.repeater.data.sort.OrderByLink$CssModifier.onComponentTag(OrderByLink.java:208)
    at org.apache.wicket.Component.renderComponentTag(Component.java:4270)
    at org.apache.wicket.Component.renderComponent(Component.java:2681)
    ... 125 more

2 个答案:

答案 0 :(得分:3)

错误在于:

table.addTopToolbar(new HeadersToolbar(table, null));

您必须在构造函数中提供DataProvider的实例而不是null

答案 1 :(得分:2)

好的,我知道了,感谢附带的myproject.zip代码。

table.addTopToolbar(new HeadersToolbar(table, null));

是导致问题的行,您必须将ISortStateLocator传递给HeadersToolbar类。