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>