2014-02-10 19 views
0

我正在使用.JSP页面和Struts2框架构建一个Web应用程序。我想创建一个自定义拦截器,它的行为就像ASP.NET中的视图状态一样。使用Struts2拦截器模拟ASP.NET的Viewstate

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

我的问题在于任何输入字段是否在当前页面上出现检测,如果有的话,要得到他们的文字。如果我的拦截器可以以某种方式读取页面的DOM,并遍历所有输入元素,那将很方便。不幸的是,我无法找到任何方法在动作/回发发生之前给拦截器访问.JSP页面的内容。这可以做到吗?

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

现在我epxloring另外一个可能性是以下设置:

*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被禁用或东西)

回答

0

我结束了使用HTML5的localStorage的:

  • 它是快速,简便,安全
  • 增刊所有浏览器都orted(IE:从IE9开始)
  • 这是客户方而已,所以不需要到服务器的通信
  • 这是真正的用户可以清除缓存,但它们在执行行动可能不会去做在网站上,所以这不是问题。

  • 小缺点:每亩的javascript启用它的工作