簡體   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