Как бороться с нулевым значением в <select>HTML-фильтре? - PullRequest
1 голос
/ 29 июня 2010

У меня есть пользовательский интерфейс, который печатает пользователя, и я не хочу иметь фильтр по стране. Я сделал классический <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>

Дело в том, что у некоторых пользователей нет страны, поэтому мне нужно разобраться с двумя фильтрами: - тот, который печатает весь пользователь, без фильтра - тот, который печатает только пользователей, у которых нет страны

Так что мне интересно, как лучше всего сказать 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...
}

Так это нормально, или это уродливо, или у кого-то есть лучший способ сделать это?

Ответы [ 2 ]

1 голос
/ 29 июня 2010

Я бы на самом деле придумал два API DAO:

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

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

Проблема с вашим подходом, по моему честному мнению, в том, что ваш API не является явным из-за динамического кода SQL.Вашему коллеге становится сложнее понять ваш код.Во-вторых, это две разные задачи, хотя они и похожи, лучше всего придумать два явных метода.Это намного проще для модульного тестирования, и у вас меньше цикломатическая сложность, потому что у вас меньше потока управления в методе.Кроме того, код легче понять, потому что другим разработчикам не нужно удивляться, почему вы тестируете countryId со значением 0 или нулевым значением, которое не передает им много значимого сообщения, за исключением того, что это просто быстрый взлом, чтобы решитьваша текущая проблема.3 недели спустя, и вам будет интересно, почему вы сами тестируете эти странные ценности.:)

0 голосов
/ 29 июня 2010

Я думаю, что ваш подход верен, но вы, возможно, захотите, чтобы любой пользователь WHERE CountryID=0 || CountryID IS NULL использовал метку «Все пользователи», чтобы вы могли фильтровать, чтобы видеть кого-либо без набора страны. Затем вы можете исправить этих пользователей, если это необходимо / необходимо. Но я думаю, что в целом ваше решение хорошо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...