使用Struts2拦截器模仿ASP.NET的Viewstate

时间:2014-02-10 17:28:17

标签: jsp struts2 viewstate

我正在使用.JSP页面和Struts2框架构建Web应用程序。我想创建一个自定义拦截器,它类似于ASP.NET中的视图状态。

当调用一个动作时,这个拦截器应该将用户输入的所有数据提取到用户来自的.jsp页面上的任何输入字段中。拦截器然后将此数据放入会话中。要显示的下一页(操作的结果,可能是与回发相同的页面)将能够再次从会话中获取此数据并在必要时再次填写输入字段。

我的问题在于在当前页面上检测是否出现任何输入字段,如果有,则获取其文本。如果我的拦截器可以某种方式读取页面的DOM,并循环遍历所有输入元素,那将是很方便的。遗憾的是,在动作/回发发生之前,我找不到任何方法来让拦截器访问.JSP页面的内容。可以这样做吗?

我知道在使用表单和提交按钮时会自动将这些值放在valuestack上,但在这种情况下,我并不总是按提交,我可能也会按下随机的其他按钮。例如,我的页面可能是一个表单,但也有3个语言按钮,用户可以在语言之间切换。按下其中一个按钮实际上不会提交表单,因此来自输入的数据不会被放在valuestack上。即使它是,每个表单可能有不同的输入字段,所以我无法使用输入字段的名称访问valuestack,因为我的viewtsate拦截器不会事先知道哪些输入存在。

我现在正在寻找的另一种可能性是以下设置:

*Whenever a user enters anything in an input field, use javascript
to put that value into the httpsession.
*Whenever a user goes to page, use javascript to populate all input fields
if there is a corresponding value present in the httpsession.

我不确定这是否会起作用,并且遗憾的是它不会使用struts框架(如果javascript被禁用或者某些东西)

1 个答案:

答案 0 :(得分:0)

我最终使用的是HTML5的本地存储:

  • 快速,简单,安全
  • 所有浏览器都支持
  • (IE:从IE9开始)
  • 仅限客户端,因此无需流量到服务器
  • 用户可以清除缓存,但在网站上执行操作时可能不会这样做,所以这不是问题。

  • 小的缺点:启用javascript以使其正常工作