[英]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.