我有这样的表格:
<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。
答案 0 :(得分:3)
您的input
结果是重定向,在重定向期间,所有请求属性(也是消息)都消失了,您必须使用MessageStoreInterceptor在请求之间保留它们。
另见Struts 2 Validation using Message Store Interceptor
http://struts.apache.org/development/2.x/docs/message-store-interceptor.html