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