【问题标题】:How to deal with null value in <select> HTML filter?如何处理 <select> HTML 过滤器中的空值?
【发布时间】:2010-06-29 13:32:06
【问题描述】:

我有一个打印用户的用户界面,但我不想按国家/地区进行过滤。 我做了一个经典的&lt;select /&gt;元素。

在 JSP 中我有

<select id="country" onchange="return filter();">
    <option value="">...</option>
    <c:forEach var="country" items="${countries}">
        <option value="${country.id}"
            ${country.name}
        </option>
    </c:forEach>
</select>

问题是一些用户没有国家,所以我需要处理 2 个过滤器: - 打印所有用户,无过滤器 - 只打印没有国家/地区的用户

所以我想知道对 Java 说的最佳方式是什么:“找到我所有的用户”和“找到我所有没有国家/地区的用户”。

我有一些想法:如果 countryId = 0,服务器将其翻译为“没有国家/地区的用户”,如果 countryId = null,则服务器将其翻译为“所有用户”。

最后,DAO 对象会进行如下查询

public List<User> findByCountry(Integer countryId){

   query = "select * from users"
   if(countryId==0){
      query+= " where country_id is null"
   }
   else if(countryId==null){
      query += " where country_id = " + countryId;
   }
   return query results...
}

这样可以吗,或者这很难看,还是有人有更好的模式来做到这一点?

【问题讨论】:

    标签: java model-view-controller design-patterns anti-patterns


    【解决方案1】:

    我实际上会想出两个 DAO API:

    public ... findAllUsers(...) {...}
    
    public ... findAllUsersWithoutACountry(...) {...} 
    

    老实说,您的方法的问题在于,由于动态 SQL 代码,您的 API 不明确。它使您的同事更难理解您的代码。其次,这是两个不同的任务,虽然它们相似,但最好想出两个显式方法。这更容易进行单元测试,并且圈复杂度更低,因为方法中的控制流更少。此外,代码更容易理解,因为其他开发人员不需要想知道为什么您要针对 0 或 null 测试 countryId ,这并没有向他们传达大量有意义的信息,除了它只是一个快速解决问题你目前的问题。 3 周后,你会想知道为什么你要自己测试这些奇怪的值。 :)

    【讨论】:

      【解决方案2】:

      我认为您的方法是正确的,但您可能想让任何用户WHERE CountryID=0 || CountryID IS NULL 使用“所有用户”标签,这样您就可以过滤以查看没有设置国家/地区的任何人。然后,您可以根据需要/需要修复这些用户。但我认为总体而言您的解决方案是好的。

      【讨论】:

        猜你喜欢
        • 2019-09-03
        • 2013-12-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-10-27
        • 2021-04-11
        • 2020-12-29
        • 2015-12-12
        相关资源
        最近更新 更多