0

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

1 回答 1

0

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

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

<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拦截器在 HTTP 会话中存储操作消息/错误。动作类应该实现ValidationAware

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

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

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

在该STORE模式下,拦截器会将ValidationAware 操作的消息/错误和字段错误存储到 HTTP 会话中。

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

在该AUTOMATIC模式下,拦截器会一直检索存储的action的message/errors和field errors并放回 ValidationAwareaction中,并且在Action执行后,如果Result是一个实例ServletRedirectResult,则自动将action的message/errors和field errors放入存储在 HTTP 会话中..


于 2016-12-28T10:22:06.203 回答