1

我有一个打印用户的用户界面,我不想按国家过滤。 我做了一个经典的<select />元素。如何处理<select> HTML过滤器中的空值?

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

查询所以这是正确的,或者是这个丑陋的,或者有人有更好的方式来做到这一点?

回答

1

我真的来了两个DAO的API:

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

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

与方法的问题,在我的真实想法,是你的API不明确,由于动态SQL代码。这会让你的同事更难理解你的代码。其次,这些是两个不同的任务,虽然它们是相似的,但最好提出两个明确的方法。这对于单元测试来说更容易,而且由于在该方法中控制流程较少,因此复杂度较低。此外,代码更容易理解,因为其他开发人员不需要怀疑为什么要测试countryId对0或null,这不会向他们传达大量有意义的消息,除非它是一个快速解决方案你目前的问题。 3周后,你会想知道你为什么要自己测试这些奇怪的值。 :)

0

我觉得你的做法是正确的,但您可能想让任何用户WHERE CountryID=0 || CountryID IS NULL使用“All Users”labe l,这样你可以过滤看到没有国家设置的人。然后,如果需要/需要,您可以修复这些用户。但我认为你的解决方案总体上是好的。