2013-04-23 56 views
0

我在传统项目中使用struts 1。我想验证表单。关于这一点,我已经阅读好article。但是我不明白struts如果form的validate方法返回非空ActionErrors。我已经指定了validate="true"input="somepage.jsp",但是如果我的表单验证未通过,我会收到一个空白页。当我忘记它必须停留在输入中指定的页面?我对吗?Struts 1表单验证

编辑

<action path="/struts/BlaBlaAction" 
       type="com.example.BlaBlaAction" 
       name="BlaBlaForm" 
       validate="true" 
       scope="request" 
       input="/struts/blablainput.jsp"> 
       <forward name="someaction" path="/struts/AnotherAction.do"/> 
       <forward name="error" path="/error.html" redirect="true"/> 
</action> 

文件夹支柱驻留在我的应用程序的根

回答

1

你还需要使用显示标签<html:errors/>验证错误,在somepage.jsp

如果你的窗体validate方法返回非空的ActionErrors,Struts将重定向到你已经定义为输入的JSP。然后,如果在输入JSP中有<html:errors>,则所有ActionErrors都会迭代并显示。

+0

如果我不显示这些错误与,我会得到一个空白页? – maks 2013-04-23 20:01:18

+0

是的,是显示validate()抛出的错误的方法,如果没有,struts将不会如何神奇地显示它们。 – 2013-04-23 20:02:48

+0

即使除了页面上还有其他元素? – maks 2013-04-23 22:31:17

0

您可能已经在struts XML配置中忘记了“失败”。看看这个例子:

<action path="/LogonSubmit" type="app.jcj.LogonAction" name="logonForm" 
      scope="request" validate="true" input="/pages/Logon.jsp"> 
    <forward name="success" path="/pages/Welcome.jsp"/> 
    <forward name="failure" path="/pages/Logon.jsp"/> 
</action> 
+0

所以我必须在我的动作中指定这个“失败”呢? – maks 2013-04-23 20:00:18

+0

是的,如果你愿意,你可以发送到成功的同一页面,但你需要明确地声明这一点。试着告诉我们这个解决方案是否有效 – cahen 2013-04-23 20:01:30

+0

@maks你不需要“失败”结果;一般来说,你可以使用'getInputForward()'方法返回定义为操作'输入'的页面。你*可能会*有不同的失败,但如果它与你的输入是相同的页面,请使用框架给你的东西。 – 2013-04-23 22:31:31