【问题标题】:How to control conversion error with struts2如何用struts2控制转换错误
【发布时间】:2011-09-22 11:52:14
【问题描述】:

我有一个包含 3 个字段、两个字符串(一个选择和一个文本字段)和一个 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>

用户操作代码:

private int userSize;

public int getUserSize() {
    return userSize;
}

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

我认为“转换”验证类型会“捕获”这类问题,但似乎没有……我的代码有什么问题?

【问题讨论】:

  • 您没有显示重要部分,例如 userSize 验证配置的其余部分和操作中的属性声明/设置器。以及什么版本的S2。另外,您是否尝试使用Integer 而不是int
  • struts 版本是 2.2.3,验证配置中没有其他内容,如果我尝试使用 Integer 会出现相同的行为:/,我将在操作中使用 getter/setter 编辑我的帖子跨度>
  • 也尝试加入int 验证;我将深入研究为什么“转换”验证器很时髦。你有我可以从 github 上获取的最小示例吗?不管怎样,我会在周末结束前调查一下——可能是验证器本身出了问题。
  • 我尝试进行int 验证,但得到相同的结果。我没有github账号,我看看这个。
  • 我不认为这是你的代码。 @ConversionErrorFieldValidator 注释我遇到了完全相同的问题。两条消息,我也假设是 Struts 生成的,我的消息也是如此。我目前正在通过覆盖 getFieldErrors() 方法并删除不需要的消息来解决此问题。所以我也会对此修复感兴趣。

标签: struts2


【解决方案1】:

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

从堆栈中删除 StrutsConversionErrorInterceptor 会删除 Struts 生成的消息,并将用户定义的消息作为唯一显示的错误消息。但是,我还没有时间调查移除此受体的任何其他副作用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-20
    • 1970-01-01
    • 1970-01-01
    • 2019-06-05
    • 1970-01-01
    相关资源
    最近更新 更多