我有一个打印用户的用户界面,但我不想按国家/地区进行过滤。
我做了一个经典<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 并不明确。这会让你的同事更难理解你的代码。其次,这是两个不同的任务,虽然它们很相似,但最好提出两种明确的方法。这更容易进行单元测试,并且圈复杂度更低,因为方法中的控制流更少。此外,代码更容易理解,因为其他开发人员不需要想知道为什么您要针对 0 或 null 测试countryId,这不会向他们传达大量有意义的消息,除了它只是解决您当前问题的快速技巧之外。三周后,您会想知道为什么自己要针对这些奇怪的值进行测试。 :)
关于java - 如何处理 <select> HTML 过滤器中的空值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3141103/