如何使用struts2控制转换错误

时间:2011-09-22 11:52:14

标签: struts2

我有一个包含3个字段,两个String(一个选择和一个文本字段)和一个int的表单。当我在字段中输入一个字母或其他东西而不是int(52.4或aaa)时,我得到了一个我无法“捕获”的错误,我的选择消失并在消息框上我收到了来自我的验证xml文件的消息(在法语)和另一个英语(我想由struts发送)。

tomcat中的

错误:

(ognl.OgnlValueStack  60 ) Error setting expression 'userSize' with value '[Ljava.lang.String;@14aa6c3'
消息框上的

错误:

Invalid field value for field "userSize".
test size

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 />

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>

UserAction-validation.xml代码:

<validators>
    <field name="userSize">
        <field-validator type="conversion">
            <message>test size</message>
        </field-validator>      
    </field>
</validators>

UserAction代码:

private int userSize;

public int getUserSize() {
    return userSize;
}

public void setUserSize(int userSize) {
    this.userSize = userSize;
}

我认为“转换”验证类型会“捕获”这类问题,但似乎不是......我的代码出了什么问题?

1 个答案:

答案 0 :(得分:0)

我一直在快速浏览一下这个,我认为双重消息的原因是,至少在我的情况下,看起来转换错误可能被处理两次,首先是StrutsConversionErrorInterceptor,再次由AnnotationValidationInterceptor。这两个拦截器都在struts-default堆栈中。

从堆栈中删除StrutsConversionErrorInterceptor会删除Struts生成的消息,并将用户定义的消息保留为显示的唯一错误消息。但是,我还没有时间去研究去除这种感受器的任何其他后果。