2015-02-03 2 views
1

У меня есть форма в распорках 2, что я показываю значение куков, как это:Преобразования нуля в пустую строку в Struts 2

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

Но каждый раз, когда печенье является нулевым (когда пользователь впервые входит in), он не пуст, но он показывает «[email protected]». Я хочу, чтобы это значение было пустым в моей форме. Так что я пытался использовать, если тег в Struts2, поэтому всякий раз, когда имя имеет нулевое значение, он установлен в пустой, как это:

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

Теперь он работает, я могу видеть мою форму будучи пустым, если нет печенья присутствует , но я хочу, чтобы показать значение куки, так что я пытался использовать еще тег, чтобы получить значение Cookie:

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

Сейчас он не работает, потому что, когда печенье отсутствует, она все еще показывает "[email protected]".

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

+0

Вот почему вам нужно использовать перехватчик 'cookie'. –

+0

@AleksandrM Должен ли я не использовать CookieProvider, а вместо этого использовать перехватчик файлов cookie? Заранее спасибо. –

+0

Они служат для разных целей. См. Http://struts.apache.org/docs/interceptors.html#Interceptors-FrameworkInterceptors. –

ответ

1

Кажется, что ваш код основан на this answer на другой вопрос. В этом коде:

<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> 
+0

Большое спасибо за ваш ответ, но он продолжает получать тот же результат, когда я хочу, чтобы он был «пустым». Странно, если я добавлю случайную букву внутри '', например 'a', она выдает штраф. Любая идея, почему это так? –

+0

Итак, тройка работает, но проблема '' '' является проблемой? Попробуйте использовать '' '' с пространством посередине. Но для меня это не имеет смысла :) –

+0

Я тоже пробовал, все еще не работаю. Да, кажется, очень странно. Любые другие советы о том, как это исправить? –

1

<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 доступны, если они не отображаются в поле ввода