Struts2, String null check

Я пытаюсь выполнить нулевую проверку строки, но это не сработает.

<s:iterator value="matrix" var="row">
    <tr>
       <s:iterator value="value" var="col">
            <td>    
                <s:if test="%{#col==null}">0</s:if>
                <s:else><s:property value="col"/></s:else>
            </td>
        </s:iterator>
    </tr>
</s:iterator>

матрица

Map<Integer, List<String>>

Переменной "col" правильно назначено строковое значение из списка.
Список может выглядеть следующим образом ["hello", null, "world ]

Текущий вывод: привет мир
Требуется вывод: привет 0 мир

/Заранее спасибо

5 ответов

Попробуйте это без #.

 <s:if test="%{col==null}">0</s:if>

Я думаю, что has попытается сначала разрешить 'col' и использовать значение col в качестве имени свойства. Так как это будет пустым, будет выполнено сравнение "" в качестве имени свойства, которое является вершиной стека значений. Я не уверен, как это оценило бы здесь.

Я всегда использую что-то вроде этого:

<s:if test="%{licenseStatusString != null}">
 ... something that uses licenseStatusString
</s:if>

Это зависит от того, используете ли вы Struts2.0.x или более позднюю версию, как id атрибут был заменен на var приписывать s:iterator начиная с Struts2.1.x.

Принимая во внимание Struts 2.1.x, лучше всего назначить var атрибут и использовать его в качестве переменной (как вы уже предложили)

<s:iterator value="bar" var="foo">
    <s:if test="#foo==null || #foo==''">0</s:if>
</s:iterator>

Вы также можете использовать top переменная для получения значения верхнего стека, но она может вступать в конфликт с атрибутами ваших объектов. Все еще работает

<s:iterator value="bar">
    <s:if test="top==null || top==''">0</s:if>
</s:iterator>

Но, если вам нужно только напечатать результат String, без каких-либо условий, будь то null или пустой, просто сделайте это так просто

<s:iterator value="bar">
    <s:property /> <!-- prints iterator current value or '' if its null -->
</s:iterator>

Ps. Нет необходимости использовать разметку ognl %{} внутри test атрибут s:if, или value атрибут s:property,

Для большего количества примеров проверьте документацию итератора struts2

Я решил свою проблему.

<s:if test="%{#col==''}">0 </s:if>

Значение в массиве строк было не нулевым, а пустой строкой.

Вы можете сделать это в одну строку (один оператор if):

<s:property value="%{col==null ? '0':col}"/></s:else>

Или добавьте еще строку

<s:property value="%{col==null ? '0': 'The column is' + col}"/></s:else>

Для этого внутри итератора в Struts2; внутри "Тестового предложения" используйте "#" для ссылки на переменную контекста.

            <s:iterator value="pageVo.voList" var="vo">
                    <s:if test="%{#vo.iconclass != null}">
                        <i class="${vo.iconclass}"></i>
                    </s:if>
                    <s:if test="%{#vo.label != null}">
                        ${vo.label}
                    </s:if>
                </button>
            </s:iterator>
Другие вопросы по тегам