我有一个包含3个字段的表单,两个字符串(一个选择和一个文本字段)和一个int.当我在字段中输入一个字母或其他东西而不是int(52.4或aaa)时,我得到了一个我无法"捕获"的错误,我的选择消失并在消息框上我收到了来自我的验证xml文件的消息(在法语)和另一个英语(我想由struts发送).
tomcat中的错误:
(ognl.OgnlValueStack 60 ) Error setting expression 'userSize' with value '[Ljava.lang.String;@14aa6c3'
Run Code Online (Sandbox Code Playgroud)
消息框上的错误:
Invalid field value for field "userSize".
test size
Run Code Online (Sandbox Code Playgroud)
JSP代码:
<s:form action="sendUserCreation" method="POST">
<s:action namespace="/" name="civilityPicklist" executeResult="true"/><br />
<s:textfield name="lastName" /><br />
<s:textfield name="userSize" /><br />
Run Code Online (Sandbox Code Playgroud)
struts.xml代码:
<action name="createUser">
<result>/jsp/user/create.jsp</result>
</action>
<action name="sendUserCreation" class="fr.action.UserAction" method="createUser">
<result>/jsp/splash.jsp?messKey=${messKey}</result>
<result name="input">/jsp/user/create.jsp</result>
</action>
<action name="civilityPicklist" class="fr.imaps.oxygene.portal.action.CivilityPicklistAction">
<result>/jsp/user/civilityPicklist.jsp</result>
</action>
Run Code Online (Sandbox Code Playgroud)
UserAction-validation.xml代码:
<validators>
<field name="userSize">
<field-validator type="conversion">
<message>test size</message>
</field-validator>
</field>
</validators>
Run Code Online (Sandbox Code Playgroud)
UserAction代码:
private int userSize;
public int getUserSize() {
return userSize;
}
public void setUserSize(int userSize) {
this.userSize = userSize;
}
Run Code Online (Sandbox Code Playgroud)
我认为"转换"验证类型会"捕获"这种问题,但似乎不是......我的代码出了什么问题?
我快速浏览了一下这一点,我认为出现双重消息的原因是,至少在我的情况下,看起来转换错误可能被处理两次,首先由 StrutsConversionErrorInterceptor 处理,然后再由 AnnotationValidationInterceptor 处理。这两个拦截器都在 struts-default 堆栈中。
从堆栈中删除 StrutsConversionErrorInterceptor 会删除 Struts 生成的消息,并将用户定义的消息保留为唯一显示的错误消息。然而,我还没有时间调查去除这个受体的任何其他副作用。
| 归档时间: |
|
| 查看次数: |
2179 次 |
| 最近记录: |