簡體   English   中英

Vaadin containerFilter選擇空字段

[英]Vaadin containerFilter select null field

我正在使用com.vaadin.data.util.sqlcontainer.query.TableQuery用來自MYSQL表的數據填充UI視圖。

我只想顯示特定字段為null的行,因此原始SQL是:

SELECT * FROM products WHERE monthsLeft IS null;

引用Vaadin文檔 ,我正在使用Vaadin SQLContainer對象將此條件設置為sqlContainer.addContainerFilter(new Compare.Equal("monthsLeft ", null));

但這會引發以下錯誤:

Sep 11, 2014 5:10:13 PM com.vaadin.server.DefaultErrorHandler doDefault SEVERE: java.lang.IllegalArgumentException: You cannot add null parameters using addParamaters(Object). Use addParameters(Object,Class) instead at com.vaadin.data.util.sqlcontainer.query.generator.StatementHelper.addParameterValue(StatementHelper.java:63) at com.vaadin.data.util.sqlcontainer.query.generator.filter.CompareTranslator.getWhereStringForFilter(CompareTranslator.java:32) at com.vaadin.data.util.sqlcontainer.query.generator.filter.QueryBuilder.getWhereStringForFilter(QueryBuilder.java:82) at com.vaadin.data.util.sqlcontainer.query.generator.filter.QueryBuilder.getJoinedFilterString(QueryBuilder.java:92) at com.vaadin.data.util.sqlcontainer.query.generator.filter.QueryBuilder.getWhereStringForFilters(QueryBuilder.java:107) at com.vaadin.data.util.sqlcontainer.query.generator.DefaultSQLGenerator.generateSelectQuery(DefaultSQLGenerator.java:107) at com.vaadin.data.util.sqlcontainer.query.TableQuery.getCount(TableQuery.java:200) at com.vaadin.data.util.sqlcontainer.SQLContainer.updateCount(SQLContainer.java:1142) at com.vaadin.data.util.sqlcontainer.SQLContainer.size(SQLContainer.java:398) at com.vaadin.ui.AbstractSelect.size(AbstractSelect.java:762) at com.vaadin.ui.Table.refreshRenderedCells(Table.java:1628) at com.vaadin.ui.Table.getVisibleCells(Table.java:3921) at com.vaadin.ui.Table.beforeClientResponse(Table.java:3155) at com.vaadin.server.communication.UidlWriter.write(UidlWriter.java:96) at com.vaadin.server.communication.UidlRequestHandler.writeUidl(UidlRequestHandler.java:149) at com.vaadin.server.communication.UidlRequestHandler.synchronizedHandleRequest(UidlRequestHandler.java:97) at com.vaadin.server.SynchronizedRequestHandler.handleRequest(SynchronizedRequestHandler.java:37) at com.vaadin.server.VaadinService.handleRequest(VaadinService.java:1329) at com.vaadin.server.VaadinServlet.service(VaadinServlet.java:236) at javax.servlet.http.HttpServlet.service(HttpServlet.java:848) at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:684) at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:503) at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:137) at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:557) at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:231)

我希望有一個Compare.IsNull但我看不到

查看源代碼,這似乎是不可能的。

此方法沒有“ IS NULL”的情況:

@Override
public String getWhereStringForFilter(Filter filter, StatementHelper sh) {
    Compare compare = (Compare) filter;
    sh.addParameterValue(compare.getValue());
    String prop = QueryBuilder.quote(compare.getPropertyId());
    switch (compare.getOperation()) {
    case EQUAL:
        return prop + " = ?";
    case GREATER:
        return prop + " > ?";
    case GREATER_OR_EQUAL:
        return prop + " >= ?";
    case LESS:
        return prop + " < ?";
    case LESS_OR_EQUAL:
        return prop + " <= ?";
    default:
        return "";
    }
}

並且僅從名稱為generateDeleteQuery,generateInsertQuery和generateUpdateQuery的三個方法中調用引用的方法(addParameters(Object,Class))。

提交補丁應該不難;)

我開始查看編寫補丁的源代碼,發現com.vaadin.data.util.filter。 IsNull 解決方案是: sqlContainer.addContainerFilter(new IsNull("monthsLeft"));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM