Преобразуване на null в празен низ в Struts 2

Имам формуляр в struts 2, който показва стойността на бисквитка по този начин:

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

Но всеки път, когато бисквитката е нулева (когато потребителят влезе за първи път), тя не е празна, а показва „javabrains.model.User@17030961“. Искам тази стойност да е празна в моя формуляр. Така че се опитах да използвам етикет if в Struts2, така че когато името е null, то е празно, като това:

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

Сега работи, виждам, че формулярът ми е празен, когато няма налична бисквитка, но искам да показва стойността на бисквитката, така че се опитах да използвам етикет else, за да получа стойността на бисквитката:

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

Сега не работи, защото когато бисквитката отсъства, тя все още показва „javabrains.model.User@17030961“.

Има ли друго решение, което работи по-добре? За да изясня, опитвам се да накарам формуляр да има празни стойности, когато няма налична бисквитка, а когато има бисквитка, искам тя да попълни тази стойност.


person John Pulple    schedule 03.02.2015    source източник
comment
Ето защо трябва да използвате cookie прихващач.   -  person Aleksandr M    schedule 03.02.2015
comment
@AleksandrM Трябва ли да не използвам CookieProvider, а вместо това да използвам прихващач на бисквитки? Благодаря предварително.   -  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>, НЕ името на бисквитката. За да стане ясно:

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

Тогава опитът ви да проверите стойността на бисквитката ИЗВЪН декларацията <s:set> е грешен, защото вместо това се опитвате да тествате променливата <s:set> (и преди дори да е създадена)!

Трябва да проверите стойността на бисквитката с нещо като:

<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> След като проверим по този начин, формулярът ми работи добре, ще покаже стойността на бисквитките, ако има налични бисквитки, ако не, ще покаже полето за въвеждане като празно

person Jayam.Nikitha    schedule 12.03.2015