2015-01-28 4 views
0

у меня есть класс действия, который экономит мое печенье, как это:Заполните форму с сохраненным печеньем

public String execute() { 

    // Save to cookie 
     Cookie name = new Cookie("name", userInfo.getName()); 
     name.setMaxAge(60*60*24*365); // Make the cookie last a year! 
     servletResponse.addCookie(name); 
} 

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

Я хочу, чтобы пользователь мог вернуться на страницу отправки и просмотреть всю информацию в только что представленных формах. Можно ли сделать это с помощью Struts2, используя сохраненные файлы cookie и получить форму для заполнения старыми данными?

Это моя форма:

<s:textfield 
     label="Name" 
     name="name" 
     key="name" 
     tooltip="Enter your Name here"/> 
+0

ли Вы хотите, чтобы заполнить формы с данными cookie? Как вы сейчас показываете эти данные на своей новой странице? –

+0

@AleksandrM Да. Я хочу заполнить форму данными cookie, поэтому, когда пользователь вернется на эту страницу, информация находится на странице. Я показываю данные следующим образом: . Спасибо за ваш ответ. –

+0

Так что прямо сейчас вы не используете данные из файла cookie вообще, не так ли? Взгляните на перехватчик файлов cookie - http://struts.apache.org/docs/cookie-interceptor.html. –

ответ

1

Чтобы отправить печенье можно использовать cookie-provider перехватчик. Он позволяет заполнять файлы cookie в действии с помощью реализации CookieProvider. Чтобы применить этот перехватчик для конфигурации действий вы можете переопределить перехватчики конфиг

<action ... > 
    <interceptor-ref name="defaultStack"/> 
    <interceptor-ref name="cookieProvider"/> 
    ... 
</action> 

CookieProvider имеет метод для реализации,

public class MyAction extends ActionSupport implements CookieProvider { 

    @Override 
    public Set<Cookie> getCookies(){ 
     Set<Cookie> cookies = new HashSet<>(); 
     Cookie name = new Cookie("name", userInfo.getName()); 
     name.setMaxAge(60*60*24*365); // Make the cookie last a year! 
     name.setPath("/"); //Make it at root. 
     cookies.add(name); 
     return cookies; 
    } 

} 

В форме

<s:set var="name">${cookie["name"].value}</s:set> 
<s:textfield 
     label="Name" 
     name="name" 
     value="%{#name}" 
     tooltip="Enter your Name here"/> 
+0

Хм, я думаю, что я не использую метод getCookies правильно в своем классе действий. Как я могу его использовать? Прямо сейчас, я просто получил его в своем классе действий, точно так же, как вы его написали. Потому что у меня случайно был мой старый код (например, я показываю в OP, // сохраняю cookie в методе execute), а теперь, когда я его удалил, cookie не сохраняется нигде. –

+1

Он используется перехватчиком, файлы cookie хранятся в корневом контексте, где вы, вероятно, должны развертываться во время выполнения. –

+0

Я развертываю в корневом контексте (по крайней мере, по крайней мере). Но я не нашел cookie в своем браузере сейчас, когда я удалил свой старый код, который у меня был с самого начала в моем методе execute, поэтому cookie был сохранен только от этого, а не от перехватчика. –