【问题标题】:How to change URL while getting response page in Struts 2如何在 Struts 2 中获取响应页面时更改 URL
【发布时间】:2016-12-28 09:17:51
【问题描述】:

我在这里使用 Struts 和 Hibernate 进行注册,我遇到了一个问题,比如当我运行我的项目时,我得到了

localhost/ProjectName/registration.jsp

当我提交数据时,数据成功保存在数据库中,在将数据保存到数据库后,我正在寻找registration.jsp作为响应页面,但那个时间 URL 将是

localhost/ProjectName/actionName.action 

这会产生一个问题,例如如果我刷新页面,最后添加的记录将再次添加

JSP 表单:

<s:form action="register">
</s:form>

struts.xml:

<action name="register" class="-----------">
    <result name="success">registration.jsp</result>
</action>

【问题讨论】:

  • @Andrea Ligios 在知道这些事情之前,请不要将其标记为重复,因为许多人对工作有很好的了解,有些人他们可能没有很好的沟通来解释
  • “在了解事情之前”?您正在寻求一种防止重复提交的方法,即 PRG(Post-Redirect-Get)。您正在使用 Struts2。答案(对您重复的问题)解释了如何使用 Struts2 实现 PRG。为什么我不应该认为这是重复的?
  • 是的,这是 PRG,我已经尝试过这种方式,但在重定向之前,我应该显示注册成功之类的消息,我该怎么做
  • 通过在G页面显示消息,你用GET调用的页面,登陆页面?无论是启动原始请求的同一页面还是不同的页面,只需添加一个actionMessage并在页面中显示它(如果存在)
  • @jancy pradeep 消息在您应该创建的属性中。不要将验证消息和错误消息与您自己的消息混淆。

标签: jsp struts2 message double-submit-prevention


【解决方案1】:

您应该关注this答案中提到的PRG pattern

创建一个 new 操作 registrationSuccess,它将在重定向操作结果后返回您的 JSP 页面。

<action name="register" class="-----------">
 <interceptor-ref name="store"> 
    <param name="operationMode">STORE</param> 
  </interceptor-ref> 
  <interceptor-ref name="defaultStack" /> 
  <result name="success" type="redirectAction">registrationSuccess</result>
</action>

<action name="registrationSuccess">
  <interceptor-ref name="store"> 
    <param name="operationMode">RETRIEVE</param> 
  </interceptor-ref> 
  <interceptor-ref name="defaultStack" />
  <result name="success">registration.jsp</result>
</action>

您可以使用store Interceptor 在 HTTP 会话中存储操作消息/错误。动作类应该实现ValidationAware

store 拦截器在两个动作之间工作,一个存储消息,另一个检索消息。

用于存储 ValidationAware 操作的消息/错误的拦截器 并将错误字段输入到 HTTP 会话中,以便可以检索 在稍后阶段。这允许操作的消息/错误和字段 错误的可用时间比特定 HTTP 请求的可用时间更长。

如果不存在会话,则不会存储任何内容并且可以检索 之后。换句话说,应用程序负责打开 会话。

STORE模式下,拦截器会存储ValidationAware 操作的消息/错误和字段错误进入 HTTP 会话。

RETRIEVE模式下,拦截器会检索存储的 操作的消息/错误和字段错误并将它们放回 ValidationAware 操作。

AUTOMATIC模式下,拦截器总是会检索存储的 操作的消息/错误和字段错误并将它们放回 ValidationAware action,并且在 Action 执行之后,如果 Result 是 ServletRedirectResult 的一个实例,操作的消息/错误 并将字段错误自动存储在 HTTP 会话中..


【讨论】:

  • 我试过这种方法是正确的,但在重定向之前我应该​​显示像注册成功这样的消息我该怎么做
  • 将动作消息添加到动作上下文中。
  • 您也可以在会话中显示消息,随心所欲。
  • 你如何在你的答案中传播信息,比如
  • STORE applicationFailedapplicationSuccess.jspRETRIEVE applicationFailed.jsp行动>
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-15
  • 2020-07-02
  • 1970-01-01
  • 2014-09-27
  • 1970-01-01
  • 2022-11-24
相关资源
最近更新 更多