1

J'ai une interface utilisateur qui imprime l'utilisateur, et je ne veux pas avoir un filtre par pays. J'ai fait un élément classique <select />.Comment gérer la valeur nulle dans <select> Filtre HTML?

Dans JSP je

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

La chose est que certains utilisateurs ne disposent pas d'un pays, donc je dois traiter avec les 2 filtres: - qui imprime tout l'utilisateur, aucun filtre - Donc, je me demande quelle est la meilleure façon de dire à Java: "trouvez-moi tous les utilisateurs", et "me trouver tous les utilisateurs qui n'ont pas de pays".

J'ai une idée: si le countryId = 0, le serveur à traduire « utilisateurs qui ne disposent pas d'un pays, et si countryId = null, le serveur « traduire en tous les utilisateurs »

. a la fin, l'objet DAO fera une requête comme

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

est donc ce ok, ou est-ce laid, ou quelqu'un a un meilleur modèle pour le faire?

Répondre

1

Je viens effectivement avec deux API DAO:

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

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

Le problème avec votre approche, à mon avis honnête, est votre API n'est pas explicite en raison du code SQL dynamique. Il est plus difficile pour votre collègue de comprendre votre code. Deuxièmement, ce sont 2 tâches différentes, alors qu'ils sont similaires, il est préférable de proposer deux méthodes explicites. Ceci est beaucoup plus facile à tester unitaire et vous avez moins de complexité cyclomatique parce que vous avez moins de contrôle dans la méthode. En outre, le code est plus facile à comprendre car les autres développeurs n'ont pas besoin de se demander pourquoi vous testez le countryId par rapport à 0 ou null, ce qui ne leur transmet pas beaucoup de messages significatifs, sauf que c'est un hack rapide à résoudre votre problème actuel. 3 semaines plus tard, et vous vous demanderez pourquoi vous testez vous-même contre ces valeurs étranges. :)

0

Je pense que votre approche est correcte, mais vous voudrez peut-être faire un utilisateur WHERE CountryID=0 || CountryID IS NULL utiliser le labe 'All Users' l, de cette façon vous pouvez filtrer pour voir n'importe qui sans un ensemble de pays. Ensuite, vous pouvez corriger ces utilisateurs si vous le souhaitez. Mais je pense que globalement votre solution est bonne.