【问题标题】:Fill a form with saved cookies用保存的 cookie 填写表格
【发布时间】:2015-01-28 11:02:47
【问题描述】:

我有一个像这样保存我的 cookie 的操作类:

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);
}

如果我提交表单,我可以在浏览器上看到已创建并保存的 cookie。当用户提交时,他们会被重定向到一个新页面,该页面包含他们刚刚创建的所有存储信息。

我希望用户能够返回提交页面并查看他们刚刚提交的表单中的所有信息。是否可以使用 Struts2 执行此操作,通过使用保存的 Cookie 并获取表单以填写旧数据?

这是我的表格:

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

【问题讨论】:

  • 你想用cookie数据填写表格吗?您现在如何在新页面中显示这些数据?
  • @AleksandrM 是的。我想用 cookie 数据填写表单,所以当用户返回该页面时,该信息就在页面上。我这样显示数据:。感谢您的回复。
  • 所以现在您根本没有使用来自 cookie 的数据,对吧?看看 cookie 拦截器 - struts.apache.org/docs/cookie-interceptor.html.
  • 没错,我根本没有使用 cookie 数据。我以前看过它,尝试实现它,但它不起作用,我不确定如何使用它。你有使用 cookie 拦截器的经验吗?
  • 发布您对 cookie 拦截器的尝试以及它对您不起作用的原因。

标签: java jsp cookies struts2 struts2-interceptors


【解决方案1】:

要发送 cookie,您可以使用 cookie-provider 拦截器。它允许您通过实现CookieProvider 在操作中填充 cookie。要将此拦截器应用于操作配置,您可以覆盖拦截器配置

<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"/>

【讨论】:

  • 嗯,我想我在操作类中没有正确使用 getCookies 方法。我应该如何使用它?现在我只是把它放在我的动作课上,就像你写的一样。因为我不小心有我的旧代码(就像我在 OP 中显示的那样,在执行方法中使用 //save cookie),现在当我删除它时,cookie 不会保存在任何地方。
  • 它被拦截器使用,cookie 存储在根上下文中,您可能应该在运行时部署。
  • 我在根上下文进行部署(至少可以肯定)。但是,当我在执行方法中删除从一开始就拥有的旧代码时,我现在在浏览器中找不到 cookie,因此 cookie 只是从中保存的,而不是由拦截器保存的。
  • 拦截器应该应用在动作配置中。
  • 输入字段的值应该填充变量值#name,你也可以尝试在set标签后面加上&lt;s:property value="#name"/&gt;打印它的值。如果请求中有 cookie,则应初始化变量。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-01-15
  • 2011-04-02
  • 2012-01-23
  • 2012-11-26
  • 1970-01-01
  • 2023-03-16
  • 2015-03-04
相关资源
最近更新 更多