【问题标题】:Vaadin containerFilter select null fieldVaadin containerFilter 选择空字段
【发布时间】:2014-09-12 20:31:22
【问题描述】:

我正在使用com.vaadin.data.util.sqlcontainer.query.TableQuery 使用 MYSQL 表中的数据填充 UI 视图。

我只想显示特定字段为空的行,所以原始 SQL 是:

SELECT * FROM products WHERE monthsLeft IS null;

引用Vaadin docs,我正在使用 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,但我没有看到一个

【问题讨论】:

    标签: java vaadin


    【解决方案1】:

    查看源代码,这似乎是不可能的。

    这个方法没有'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 "";
        }
    }
    

    并且引用的方法 (addParameters(Object,Class)) 仅从名为 generateDeleteQuery、generateInsertQuery 和 generateUpdateQuery 的三个方法中调用。

    不过提交补丁应该不会太难 ;)

    【讨论】:

      【解决方案2】:

      我开始查看源代码以编写补丁,发现 com.vaadin.data.util.filter.IsNull。 解决方案是: sqlContainer.addContainerFilter(new IsNull("monthsLeft"));

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-06-08
        • 2012-12-19
        • 2012-04-05
        • 1970-01-01
        • 2018-12-27
        • 1970-01-01
        • 1970-01-01
        • 2012-10-16
        相关资源
        最近更新 更多