Преобразование null в пустую строку в Struts 2

У меня есть форма в struts 2, в которой я показываю значение файла cookie следующим образом:

 <s:set var="name">${cookie["name"].value}</s:set>
<s:textfield name="name" value="%{#name}"/>

Но каждый раз, когда файл cookie имеет значение null (когда пользователь впервые входит в систему), он не пуст, а показывает «javabrains.model.User@17030961». Я хочу, чтобы это значение было пустым в моей форме. Поэтому я попытался использовать тег if в Struts2, поэтому всякий раз, когда имя имеет значение null, оно устанавливается пустым, например:

<s:if test="#name == ''"><s:set var="name" value="''"/></s:if>

Теперь это работает, я вижу, что моя форма пуста, когда нет файла cookie, но я хочу, чтобы он отображал значение файла cookie, поэтому я попытался использовать тег else, чтобы получить значение файла cookie:

 <s:else><s:set var="name">${cookie["name"].value}</s:set> </s:else> 

Теперь это не работает, потому что, когда файл cookie отсутствует, он все равно показывает «javabrains.model.User@17030961».

Есть ли другое решение, которое работает лучше? Чтобы уточнить, я пытаюсь заставить форму иметь пустые значения, когда файл cookie отсутствует, а когда файл cookie есть, я хочу, чтобы он заполнил это значение.


person John Pulple    schedule 03.02.2015    source источник
comment
Вот почему вам нужно использовать перехватчик cookie.   -  person Aleksandr M    schedule 03.02.2015
comment
@AleksandrM Должен ли я не использовать CookieProvider, а вместо этого использовать перехватчик файлов cookie? Заранее спасибо.   -  person John Pulple    schedule 03.02.2015
comment
Они служат разным целям. См. struts.apache.org/docs/.   -  person Aleksandr M    schedule 04.02.2015


Ответы (2)


Похоже, ваш код основан на этом ответе на другой ваш вопрос. В этом коде:

<s:set var="name">${cookie["name"].value}</s:set>
<s:textfield name="name" value="%{#name}" />

#name – это имя переменной <s:set>, а НЕ имя файла cookie. Чтобы было понятно:

<s:set var="foobar">${cookie["name"].value}</s:set>
<s:textfield name="name" value="%{#foobar}" />

Тогда ваша попытка проверить значение cookie ВНЕ объявления <s:set> неверна, потому что вместо этого вы пытаетесь проверить переменную <s:set> (и даже до того, как она будет создана)!

Вы должны проверить значение cookie с помощью чего-то вроде:

<s:if test="#cookie.name!=null">
    <s:set var="name">${cookie["name"].value}</s:set>
</s:if>
<s:else>
    <s:set var="name" value="''"/>
</s:else>

, но поскольку вы используете только перехватчик CookieProvider, попробуйте использовать тернарный оператор непосредственно в JSP EL:

<s:set var="name">${not empty cookie["name"] ? cookie["name"].value : ''}</s:set>
person Andrea Ligios    schedule 03.02.2015
comment
Большое спасибо за ваш ответ, но он продолжает получать один и тот же результат всякий раз, когда я хочу, чтобы он был ' ' (пустым). Странно то, что если я добавляю случайную букву внутри ' ', например 'a', она печатает штраф. Любая идея, почему это так? - person John Pulple; 04.02.2015
comment
Итак, тройка работает, но проблема в ''? Попробуйте использовать ' ' с пробелом посередине. Но для меня это не имеет смысла :) - person Andrea Ligios; 04.02.2015
comment
Я тоже так пробовал, все равно не работает. Да выглядит очень странно. Любые другие советы о том, как это исправить? - person John Pulple; 04.02.2015

<s:set var="name">${not empty cookie["name"] ? cookie["name"].value : "notfound"}</s:set> <s:if test="#name== 'notfound'"><s:set var="name" value="''"/></s:if> После такой проверки моя форма работает хорошо, она покажет значение файлов cookie, если файлы cookie доступны, если нет, поле ввода будет отображаться как пустое.

person Jayam.Nikitha    schedule 12.03.2015