8 чекбосов или 256 вариантов?

278
04 апреля 2018, 11:20

На клиенте (index.jsp) имею 8 чекбоксов - комплектации авто:

  1. Кожаный салон,
  2. Цвет металлик,
  3. ГУР,
  4. Спойлер,
  5. Подогрев сидений,
  6. Подогрев задних сидений
  7. Климат контроль,
  8. 3-ех зонный климат контроль

JavaScript методом XMLHttpRequest передаю серверу значение всех чекнутых и не чекнутых боксов. Например, все восемь будут выглядеть так: 111111,11. Отмеченный первый: 0,01, второй: 0.1, первый и пятый: 100,01, шестой и первый 1000,01 и т.д.

Бизнес под каждый результат готовит соответствующий запрос в БД и возвращает клиенту ответ.

С математикой у меня не все радужно, и по моим расчетам выходит, что у меня 256 вариантов комплектации авто. То есть мне необходимо написать под каждый вариант соответствующих запросов в размере 256? Но это вообще не вариант.

Смотрела готовый вариант оракла, но там перебор картинок и, думаю, результаты БД вшить не получится.

Ребят, вопрос подразумевала в следующем: как в сервлете обработать 256 запросов клиента. С учетом, что каждый запрос обращение к БД.

Answer 1

Я не уверен, что правильно все понял, но постарался решить вашу задачу.

// Список инпутов 
let inputs = document.querySelectorAll('input[type="checkbox"]') 
inputs = Array.prototype.slice.call(inputs); 
 
// Конейтнер, куда выплевываем результат 
const resultContainer = document.getElementById('result'); 
 
// Событие на переключение чекбоксов 
inputs.forEach(function(input) { 
  input.addEventListener('change', getResponseString); 
}); 
 
function getResponseString() { 
  var result = ''; 
   
  // Собираем строку с правильными значениями 
  inputs.forEach(function(input, i) { 
    result += input.checked ? '1' : 0; 
     
    // Добавляем точку 
    if(i === 5) result += '.'; 
  }); 
   
  result = result.split('.'); 
   
  // Получаем левую часть 
  let left = result[0].split('').reduce(function(prev, current) { 
    // Откидываем нули в начале   
    return !prev && !parseInt(current) ? prev : prev + current; 
  }, ''); 
   
  // Если вообще всё отсеяли, то делаем нулем 
  if(left == '') left = '0'; 
   
  // Правая часть 
  let right = result[1].split('').reduceRight(function(prev, current) { 
    // Откидываем нули в начале   
    return !prev && !parseInt(current) ? prev : prev + current; 
  }, ''); 
  
  // Переменная в которую склеим запрос 
  var request = ''; 
   
  // Если в правой части есть хоть что-то, то склеиваем 
  if(right != '') { 
    // Разворачиваем правую часть, это важно потому что мы собирали првую часть с помощью reduceRight, а она идет по строке в обратном порядке 
    right = right.split('').reverse().join(''); 
     
    // и склевивем 
    request = left + '.' + right; 
  } 
   
  // в противном случае отдаем только левую часть 
  else { 
    request = left; 
  } 
   
  // Выводим результат 
  resultContainer.textContent = request; 
} 
 
// Взываем при загрузке, чтобы сразу же видеть результат 
getResponseString();
<label> 
  <input type="checkbox"> 
  <span>Кожаный салон</span> 
</label><br> 
<label> 
  <input type="checkbox"> 
  <span>Цвет металлик</span> 
</label><br> 
<label> 
  <input type="checkbox"> 
  <span>ГУР</span> 
</label><br> 
<label> 
  <input type="checkbox"> 
  <span>Спойлер</span> 
</label><br> 
<label> 
  <input type="checkbox"> 
  <span>Подогрев сидений</span> 
</label><br> 
<label> 
  <input type="checkbox"> 
  <span>Подогрев задних сидений</span> 
</label><br> 
<label> 
  <input type="checkbox"> 
  <span>Климат контроль</span> 
</label><br> 
<label> 
  <input type="checkbox"> 
  <span>3-ех зонный климат контроль</span> 
</label><br><br> 
 
<div id="result">000000,00</div>

READ ALSO
Java игра. Угадай число

Java игра. Угадай число

Коллеги, доброго дняНе могу понять, как сделать правильно: Необходимо сделать игру, в которой нужно угадать число компьютера

204
Проблема с контроллерами в Spring-MVC

Проблема с контроллерами в Spring-MVC

Здравствуйте, в последних нескольких коммитаъ возникла странная ошибка, так и не получилоьс отследить откуда у нее корни растут, хотя до этого...

254
File Chooser Dialog со специфичным расширением (.svg)

File Chooser Dialog со специфичным расширением (.svg)

Необходимо сделать так, чтобы File Chooser Dialog делал доступными для выбора не все файлы, а только те, которые имеют расширениеsvg Мой код:

218
Эффективная сортировка ArrayList

Эффективная сортировка ArrayList

Нужно написать реализацию функции void merge(ArrayList a, ArrayList b) { // тело функции }

384