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,這樣你可以過濾看到沒有國家設置的人。然後,如果需要/需要,您可以修復這些用戶。但我認爲你的解決方案總體上是好的。