我在这里使用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会话中。