繁体   English   中英

如何处理空值 <select> HTML过滤器?

[英]How to deal with null value in <select> HTML filter?

我有一个可以打印用户的用户界面,并且我不想按国家/地区进行过滤。 我做了一个经典的<select />元素。

在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...
}

那可以吗,还是丑陋,或者有人有更好的模式来做到这一点?

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

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

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

坦白地说,您的方法存在的问题是由于动态SQL代码,您的API并不明确。 这使您的同事更难理解您的代码。 其次,这些是2个不同的任务,尽管它们相似,但最好提出两种显式方法。 这使单元测试更加容易,并且由于简化了方法中的控制流程,因此循环复杂度也降低了。 此外,该代码更易于理解,因为其他开发人员无需怀疑您为什么要针对0或null测试countryId,这并不能向他们传达大量有意义的消息,而不仅仅是解决问题您当前的问题。 在接下来的3周内,您会想知道为什么要自己针对这些怪异的价值观进行测试。 :)

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM