java - 从 Spring MVC 返回警告和错误?

标签 java spring jsp spring-mvc

我正在寻找一种方法来返回非致命验证“警告”消息以显示在 JSP 表单上(除了通常的验证“错误”消息之外)。这些将是允许处理继续而不是阻止任务完成的消息。

我想为此使用现有的 Spring 4 MVC 管道:BindingResult对象、Spring Validator 接口(interface)和 Spring <form:errors />标签。但到目前为止,我还没有弄清楚返回第二个 BindingResult 对象和显示消息的细节。

这是我到目前为止所得到的:

myFormValidator.validate(myForm, bindingResult);
myFormValidator.validateWarnings(myForm, warnings);
model.addAttribute("warnings",warnings);
return new ModelAndView(FORM_VIEW, "myForm", myForm);

但我不知道如何绑定(bind)自由 float 的 BindingResult 对象 warnings<form:errors /> JSP 端的标记。有人可以帮忙吗?

最佳答案

使用现有的 <form:errors /> 似乎没有一种简单的方法可以做到这一点标签。我最后做的是创建一个基于 ErrorsTag.java 及其父类(super class)的自定义标签。

标签的外观如下:

<mytag:warnings bind="${warnings}" path="myFieldName" />

这将列出 myForm.myFieldName 的所有警告在一个漂亮的样式 block 中。

这是内容(样板可以从 http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/web/servlet/tags/form/AbstractHtmlElementTag.html 获得):

protected boolean shouldRender() throws JspException {
    try {
        if (this.getPath() != null &&
                this.getPath() != "") {
            // Field errors
            return (this.bind.hasFieldErrors(this.getPath()));
        } else {
            // Global errors
            return this.bind.hasGlobalErrors();
        }
    } catch (IllegalStateException ex) {
        // Neither BindingResult nor target object available.
        return false;
    }
}

protected int writeTagContent(TagWriter tagWriter) throws JspException{
    if (shouldRender()) {
        return doWrite(tagWriter);
    }
    return BodyTag.SKIP_BODY;
}

protected int doWrite(TagWriter tagWriter) throws JspException {
    try {
        tagWriter.startTag(getElement());
        writeDefaultAttributes(tagWriter);
        String delimiter = ObjectUtils.getDisplayString(evaluate("delimiter", getDelimiter()));
        List<String> errorMessages = null;
        if (this.getPath() != null) {
            errorMessages = getFieldErrorMessages(bind.getFieldErrors(this.getPath()));
        } else {
            errorMessages = getGlobalErrorMessages(bind.getGlobalErrors());
        }
        tagWriter.appendValue("<ul>");
        for (int i = 0; i < errorMessages.size(); i++) {
            String errorMessage = errorMessages.get(i);
            tagWriter.appendValue("<li>");
            tagWriter.appendValue(getDisplayString(errorMessage));
            tagWriter.appendValue("</li>");
        }
        tagWriter.appendValue("</ul>");
        tagWriter.forceBlock();
        tagWriter.endTag();
    } catch (NullPointerException ex) {
        ex.printStackTrace();
    }

    return BodyTag.EVAL_BODY_INCLUDE;
}

关于java - 从 Spring MVC 返回警告和错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32952073/

相关文章:

java - TaskExecutor 和 TaskScheduler 被 Spring 拾取为相同类型

java - 使用 for 循环创建多维数组

java - Atmosphere 、JBoss AS 7.1.1、Chrome 问题

java - 在 Spring boot 中指定 Tomcat 'Resource's

java - 尝试构建 Rest 服务时 Spring boot 失败

javascript - 使用 AJAX 从 JSP 页面调用 Action 类

javascript - jsp中加载html head标签常用文件

java - java.util.concurrent.LinkedBlockingQueue 中的奇怪代码

java - 重组或重新组装 EJB 2 EAR 以在 Eclipse 中进行调试

java - request.getRemoteUser 在一定时间后返回 null?