页面加载而不是提交时发生的strutsvalidation

请原谅我; 我对struts有点新意。 我遇到的问题是,当页面加载时我的validation发生,而不是我实际提交表单时。 我一整天都在Google上搜索和搜索论坛,没有运气。 我显然做了一些错误的事情应该很容易确定,但我还没有找到我的问题。

这是我的struts.xml的片段:

  jsp/index.jsp jsp/index.jsp jsp/results.jsp  

如您所见,如果validation成功,我有一个我想提交给results.jsp的操作。 否则,我希望它再次显示我的index.jsp。 据我所知,页面正确导航。 我可以导航到app / initTest.action并提交我的表单,它会将我带到结果页面并向我显示我的预期结果。 我的问题在于validation。

好像validation工作正好在错误的时间。 我有一个[Action] -validation.xml创建在与我的类相同的位置,该操作与该操作相关联,当页面最初加载时,我已经看到该页面上此xml文件的错误消息。

这是我在validation.xml文件中的内容:

    Please select an item.    

您将提供的任何帮助将不胜感激!

谢谢!


@nmc,我试图想象使用单独动作的选项。 它会是这样的吗? 如果validation失败,它会重定向回原始表单页面吗?

  jsp/index.jsp initTestResults    jsp/indexResults.jsp jsp/indexResults.jsp  

我想弄清楚哪个选项更适合我的目的。

感谢您的输入。

无论结果如何 ,validation都会在validation文件名中指定的操作之前运行。 因此,如果您只有一个操作来显示和处理表单,那么validation将在显示之前以及处理表单之前对该操作运行。

如果这不是您想要的行为,请将页面的显示/加载移动到其他操作。

正如nmc所说,validation会触发操作,这就是导致validation发生的原因。 但是,您仍然可以在不将其分为两个不同的操作的情况下执行此操作。

首先,您可以通过删除init方法并仅使用输入来解决此问题 – 因此您的初始URL将是inputTest而不是initTest。 默认情况下,validation拦截器不会触发输入方法。 这就是通常的处理方式,以及我如何布置我的所有行动。

如果使用init设置,则可以实际指定validation拦截器从validation中排除哪些方法。 您可以将xml更改为如下所示:

   init,input  jsp/index.jsp jsp/index.jsp jsp/results.jsp  

使用这个xml只是告诉validation拦截器不要为init或输入方法触发。

只是几个不同的解决方案,让您只使用一个动作类。

用。注释

@SkipValidation

在方法上,您不需要validation。