在Struts 2中获取响应页面时,如何更改URL 2



我在这里使用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>

您应该遵循此答案中提到的PRG模式。

创建 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操作以及执行后的操作后,如果结果为ServletRedirectResult的实例,该操作的消息/错误并将字段错误自动存储在HTTP会话中。


最新更新