服务器端验证有效,但它不显示错误消息

时间:2013-04-11 01:34:54

标签: validation struts2

我有这样的表格:

    <s:form
        action="conexion" validate="true" theme="css_xhtml">
        <s:textfield name="username" key="profile.rut" labelposition="left" />
        <s:password name="password" key="profile.password" labelposition="left" />
        <s:submit id="boton_ingreso" align="left" cssClass="send" value="Entrar" />
    </s:form>

此验证人:

<validators>
<field name="username">
    <field-validator type="requiredstring">
        <param name="trim">true</param>
        <message>*</message>
    </field-validator>
    <field-validator type="rutValidator">
        <param name="trim">true</param>
        <message>*</message>
    </field-validator>
</field>
<field name="password">
    <field-validator type="requiredstring">
        <param name="trim">true</param>
        <message>*</message>
    </field-validator>
</field>    
</validators>

这个定义:

    <action name="conexion" class="agenda.SecurityAction">
        <interceptor-ref name="profiling">
            <param name="profilingKey">profilingKey</param>
        </interceptor-ref>            
        <interceptor-ref name="jsonValidationWorkflowStack"/>
        <result name="success" type="tiles">/profile.tiles</result>
        <result name="error" type="redirectAction">
            <param name="actionName">cliente</param>
        </result>
        <result name="input" type="redirectAction">
            <param name="actionName">cliente</param>
        </result>
    </action>                

这完全适用于客户端。但是,当我从表单中删除validate =“true”以便测试服务器端时,出现了valdation,并且表单再次加载,但没有出现错误消息。

关于相同的其他问题:我没有使用JSON验证,而是正常的客户端验证。当我删除定义时为什么它不起作用?

我想这可能是因为jsonValidationWorkflowStack可能继承自其他验证拦截器。如果是,也许定义另一个是方便的,而不是jsonValidationWorkflowStack。

1 个答案:

答案 0 :(得分:3)

您的input结果是重定向,在重定向期间,所有请求属性(也是消息)都消失了,您必须使用MessageStoreInterceptor在请求之间保留它们。

另见Struts 2 Validation using Message Store Interceptor

http://struts.apache.org/development/2.x/docs/message-store-interceptor.html