【问题标题】:How to validate input from form in struts2 action如何在struts2动作中验证来自表单的输入
【发布时间】:2016-09-22 07:55:49
【问题描述】:

我有一个带有 struts2 表单的 jsp,它有一个类型为 number 的输入小部件,如果我清空这个小部件然后提交到表单,在 struts 中(在我的验证方法之前)我在调试日志中得到这个:

19:10:30,734 ERROR [com.opensymphony.xwork2.interceptor.ParametersInterceptor.error:34] Developer Notification (set struts.devMode to false to disable this message):
Unexpected Exception caught setting 'someDto.intCol' on 'class mypackage.MyAction: Error setting expression 'someDto.intCol' with value ['', ]

我想捕获这个异常(“意外异常”)做一些事情,然后在验证器中(在操作中)使用 ActionSupport 类中的 addFieldError 设置错误,

感谢您的帮助:)

编辑:

dto 类:

public class SomeDto() {

    private Integer intCol; //{with getters&setters}

问题在于,当用户清除 Form(在 jsp 中)中的输入时,struts 会尝试将 [''](或 String 为空)转换为带有 ParametersInterceptor 类的 Integer(如日志中所示)排队)。

所以,dto 有 getter 和 setter。

【问题讨论】:

  • intCol 变量的数据类型是什么?
  • 为此,您需要另一个参数拦截器。您需要发布 MCVE,因为没有它,问题就离题了。
  • 你缺少二传手

标签: java validation jsp struts2


【解决方案1】:

您可以使用“ParameterAware”拦截器:

@Override
public void setParameters(Map<String, String[]> parameters) {
    System.out.println("parameters: " + parameters);

    if (parameters.get("someDto.intCol")[0].length() == 0) {
        parameters.put("someDto.intCol", new String[]{"0"});
    }
}

这将从 jsp 中捕获参数,如果为空,则改为 0,

问候。

【讨论】:

    【解决方案2】:

    正如@RomanC 提到的,如果您查看第 299 行附近的 ParametersInterceptor,您会发现这个循环:

    for (Map.Entry<String, Object> entry : acceptableParameters.entrySet()) {
                String name = entry.getKey();
                Object value = entry.getValue();
                try {
                    newStack.setParameter(name, value);
                } catch (RuntimeException e) {
                    if (devMode) {
                        notifyDeveloperParameterException(action, name, e.getMessage());
                    }
                }
            }
    

    这是发生异常的地方,您会看到日志消息。你可以扩展ParametersInterceptor 并做你想做的事。例如,您可以在ValueStack 中放入一些参数,然后在action 中使用它。

    但这对我来说似乎也很棘手。您可能会找到另一种方法来解决您的问题,而不是直接处理此拦截器代码。例如将intCol 转换为String 并使用验证器。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-04-10
      • 2018-04-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-09
      • 1970-01-01
      相关资源
      最近更新 更多