Redirect Struts2:我不知道';我不希望用户在不单击提交按钮的情况下访问成功页面

Redirect Struts2:我不知道';我不希望用户在不单击提交按钮的情况下访问成功页面,redirect,struts2,Redirect,Struts2,我的设置如下: 用户转到action 1st>showRegisterUser>(register.jsp) 当用户单击submit按钮时,用户被引导到action>RegisterUser>(register.jsp) 现在,show方法不再进行验证,因此页面是干净的(即没有验证错误) 当用户单击提交时,将执行验证(如果有任何错误,将显示在页面上) 我的要求是,如果用户直接点击RegisterUser页面(而不是单击submit) 然后,应将它们重定向到showRegisterUser操作 由

我的设置如下:

用户转到action 1st>showRegisterUser>(register.jsp)

当用户单击submit按钮时,用户被引导到action>RegisterUser>(register.jsp)

现在,show方法不再进行验证,因此页面是干净的(即没有验证错误) 当用户单击提交时,将执行验证(如果有任何错误,将显示在页面上)

我的要求是,如果用户直接点击RegisterUser页面(而不是单击submit) 然后,应将它们重定向到showRegisterUser操作

由于验证失败,我无法在execute中编写任何代码,因此永远不会触及execute中的代码

有人能给我指一下正确的方向吗


谢谢在您的验证程序中,您可以设置指示验证成功的会话属性。在RegisterUser页面上,您可以检查此会话属性,并根据需要重定向

当您到达RegisterUser页面时,您需要取消设置“valid”会话属性,或者如果您不想从会话中接受多个注册,请在showRegisterUser上检查它并重定向回RegisterUser页面(如果已设置)


Struts使用控制器。xml文件将与输入字段进行比较,但它不会自行运行:控制器类正在运行实际的比较。在控制器类中,您可以决定输入是否有效,并可以决定从那里转到哪个视图。

当验证失败时,它默认为输入响应。如果您有一个execute和一个input方法,那么您可以将您的操作连接为:

/showRegisterUser -> Action.input
/registerUser -> Action.execute

将您的“输入”响应指向“空白/清除”表单,并在表单中添加其他所有内容。

在表单中添加一个隐藏字段

<s:hidden name="submitClicked" value="false"/>

现在将此字段的值更改为true
onclick
“提交”按钮。
现在,在您的验证方法中,检查此字段的值,如果其
为false
,则跳过验证并重定向到所需的
showRegisteredUser
操作或任何内容,感谢您的回复,但问题是如果用户直接点击RegisterUser页面,大多数必填字段都是空的,因此永远不会调用execute方法,并且我无法从validate方法重定向。那么把重定向放在哪里呢??我还可以从validate.xml中设置会话属性,或者它必须在操作(java类)中吗?起初我以为是这样,但如果我将输入响应(我使用重定向到showRegisterUser)指向一个干净的,那么即使用户确实缺少字段,也不会显示错误。我还尝试添加一个input()方法来有条件地返回input或redirect类型,但如果我点击/RegisterUser,则不会调用该输入方法。如果try/inputRegisterUser,则工作正常。回到第一步。@Rushi您可以使用来存储重定向中的状态。@DaveNewton作用域拦截器在我的情况下有什么帮助???@Rushi它存储重定向中的状态,就像我刚才说的--您说您在重定向中丢失了错误消息。好的,谢谢。但我已经知道,提交是点击或不使用此[链接]。我所有的验证都在xml文件中,因此它将在我的操作中涉及验证方法之前执行,我认为不可能“以struts2”的方式重定向验证方法