Struts2, String null check - PullRequest
       16

Struts2, String null check

3 голосов
/ 19 августа 2010

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

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

Текущий вывод: hello world
Требуемый вывод: hello 0 мир

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

Ответы [ 5 ]

4 голосов
/ 19 августа 2010

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

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

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

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

<s:if test="%{licenseStatusString != null}">
 ... something that uses licenseStatusString
</s:if>
3 голосов
/ 15 апреля 2011

Зависит от того, используете ли вы 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 Doc

0 голосов
/ 17 мая 2017

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

            <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>
0 голосов
/ 08 августа 2016

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

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

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

<s:property value="%{col==null ? '0': 'The column is' + col}"/></s:else>
0 голосов
/ 20 августа 2010

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

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

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

...