Как использовать значение скриптлета в тернарной операции JSP?

На моей странице JSP я получаю двойные значения, полученные из базы данных. Внутри тега scriptlet я инициализирую переменные Java, которые будут использоваться, как показано ниже:

<body>
    <%
        Map<String, Double> colorMap = new HashMap<>();
        colorMap = InsightDbConn.getInstance().getFpyRtyColorLimits();
        double var_yellow = colorMap.get("fpy_yellow"); // storing 85
        double var_green = colorMap.get("fpy_green"); // storing 93
    %>

Мне нужно использовать эти значения, чтобы установить цвета строк таблицы на основе полученных значений. Я использую класс CSS для установки цветов строк. Но чтобы определить это значение класса, я использую тернарный оператор JSP для перебора значений, полученных из базы данных.

Ниже мой код:

 <c:forEach items="${fpyrtyDailyList}" var="entry">
     <tr>
        <td>${entry.category}</td>
        <td>
          <div class="${entry.percentage == 0 ? 'green' : entry.percentage < var_yellow ? 'red' : entry.percentage < var_green ? 'yellow' : 'green' }">
             ${entry.percentage}
          </div>
        </td>
        <td>${entry.daily_date}</td>
        <td>${entry.total_tests}</td>
        <td>${entry.total_passed}</td>
     </tr>
 </c:forEach>

Как видно из приведенного выше кода, я пытаюсь установить значение класса CSS с помощью переменных Java, которые я определил в скриптлете. Если я использую числовые значения, работа будет выполнена. Значения являются динамическими и могут меняться со временем, поэтому вместо этого я намерен использовать переменные скриптлета.

Может кто-нибудь любезно сказать, где я ошибся.

EDIT 1: я хочу повторить значение класса CSS внутри цикла, чтобы каждая строка получала свой цвет строки в зависимости от значения, которое она содержит.


person Vishal A    schedule 08.02.2017    source источник
comment
В первом случае с помощью скриптлетов...   -  person chrylis -cautiouslyoptimistic-    schedule 08.02.2017
comment
Я пытаюсь использовать значения скриптлетов, но он окрашивает все строки в зеленый цвет или, если быть точным, с использованием определенного в CSS класса «зеленый». Он не использует переменные   -  person Vishal A    schedule 08.02.2017
comment
${entry.percentage} - это не скриптлет, а нотация языка выражений ;) Скриптлет будет <% String s = value == 0 ? "foo" : "bar" %>   -  person AxelH    schedule 08.02.2017
comment
Возможный дубликат тернарного оператора в JSTL/EL   -  person AxelH    schedule 08.02.2017
comment
Или, если мое второе прочтение вопроса является более точным (не суждения о необходимости), Как оценить переменную скриптлета в EL?< /а>   -  person AxelH    schedule 08.02.2017
comment
Это не решило проблему. Я хочу повторить значение класса CSS внутри цикла for, чтобы каждая строка получала свой собственный цвет строки в зависимости от значения, которое она содержит.   -  person Vishal A    schedule 08.02.2017


Ответы (1)


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

<c:set var="entryPercentage" value="${entry.percentage}"/>
<div class="${entryPercentage == 0 ? 'green' : entryPercentage < var_yellow ? 'red' : entryPercentage < var_green ? 'yellow' : 'green' }">
person Rashid    schedule 26.01.2020