【问题标题】:Struts2 validation doesn't workStruts2 验证不起作用
【发布时间】:2012-07-04 17:07:30
【问题描述】:

我正在尝试使用 Struts2 验证器工具验证表单,但它似乎不起作用,因为显然 xml 验证器从未得到确认。

这是我的代码:

struts.xml:

<interceptors>
    <interceptor name="login_interceptor" class="org.apache.struts.gesprod.produccion.BLLogin">
    </interceptor>
    <interceptor-stack name="login_stack">
        <interceptor-ref name="login_interceptor" />
        <interceptor-ref name="defaultStack" />
    </interceptor-stack>
</interceptors>

<default-interceptor-ref name="login_stack"></default-interceptor-ref>

<global-results>
    <result name="input">/errores/error_input.jsp</result>
    <result name="error_sql">/errores/error_sql.jsp</result>
    <result name="no_logged">/login.jsp</result>
</global-results>
...
<action name="login" class="org.apache.struts.gesprod.produccion.BLUsuario" method="loginUsuario">
    <result name="success" type="redirect">/welcome.jsp</result>
    <result name="incorrecto_login">/login.jsp</result>
    <result name="input">/login.jsp</result>
</action>

login.jsp:

<div id="login">
    <s:fielderror />
    <s:form id="login_form" action="login" validate="true">
        <s:hidden name="intento_log" value="true" />
        <s:textfield name="usuario.username_usuario" label="Usuario"/>
        <s:password name="usuario.password_usuario" label="Password"/>
        <s:submit value="Ingresar"/>
    </s:form>
</div>

还有xml验证器,和Action类放在同一个包里。

BLUsuario-login-validation.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC 
    "-//OpenSymphony Group//XWork Validator 1.0.2//EN" 
    "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">
<validators>
    <field name="usuario.username_usuario">
        <field-validator type="requiredstring">
            <message>Show error!</message>
        </field-validator>
    </field>
</validators>

如果我的代码有问题,有人可以帮忙看看吗?

【问题讨论】:

  • 首先,我注意到您已将“输入”结果映射到全局。这可能是您问题的一部分。当验证被执行并且失败时,它会返回一个输入结果。因此,如果要在 login.jsp 中显示字段错误,则需要将输入结果映射到该 JSP 以进行登录操作。
  • @rees 谢谢你,我按照你的建议做了,当然,应该保持这种状态。但它仍然不执行验证,好像即使字段错误也永远不会返回“输入”结果。

标签: struts2


【解决方案1】:

我认为问题出在 xml 验证器的名称上。您必须使用login-validation.xml 重命名验证器。您可以为您的 xml 验证器文件添加的名称是:

可以指定验证规则:

每个动作类:在名为 ActionName-validation.xml 的文件中

每个操作别名:在名为 ActionName-alias-validation.xml 的文件中

Action 类实现的继承层次结构和接口: XWork 向上搜索操作的继承树以查找操作的父类和实现的接口的默认验证

您可以在此处查看更多信息: http://struts.apache.org/2.0.12/docs/validation.html#Validation-DefiningValidationRules

P.D:您说过“即使字段错误,也不会返回“输入”结果”。如果有任何字段错误,则返回输入结果(除非您指定其他内容)。

【讨论】:

  • 我的意思是如果我在自定义验证中指定的字段有误,则不会返回输入结果。例如,如果我在需要 int 的地方放置一个字符串,那么结果当然是“输入”。
  • 非常感谢您的帮助,但这也没有用。有没有办法调试验证拦截器?
  • 我不知道。你能用你现在拥有的东西来编辑你的问题吗?你用的是简单的主题吗?如果在jsp中放入&lt;s:fielderror/&gt;标签,会出现错误吗?你声明过拦截器吗?
  • 完成。我使用的是 Struts2 提供的默认主题。表单在“wwFormTable”类 div 中呈现。至于 ,它正在工作,因为它正在加载它应该加载的脚本。我也会将我的拦截器堆栈添加到问题中。
  • 如果在客户端删除验证,jsp会显示字段错误吗? P.D:global-results 中的这一行没有意义:&lt;result name="input"&gt;/errores/error_input.jsp&lt;/result&gt;
猜你喜欢
  • 2012-12-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多