我正在使用注释在 SpringMVC 中尝试验证...
我为一个字段使用了 2 个注释来验证
@NotEmpty(message="需要")
@Size(min="3" max="8" message="超出范围")
私人字符串密码;
我面临的问题是,当该字段留空时,它会显示两个错误消息(*必需以及超出范围)。但我想显示这些错误消息中的任何一个,而不是同时显示...
是否可以通过一条消息进行限制?如果是这样,这种情况的可能性是什么?
任何建议和指导表示赞赏..在此先感谢...
我正在使用注释在 SpringMVC 中尝试验证...
我为一个字段使用了 2 个注释来验证
@NotEmpty(message="需要")
@Size(min="3" max="8" message="超出范围")
私人字符串密码;
我面临的问题是,当该字段留空时,它会显示两个错误消息(*必需以及超出范围)。但我想显示这些错误消息中的任何一个,而不是同时显示...
是否可以通过一条消息进行限制?如果是这样,这种情况的可能性是什么?
任何建议和指导表示赞赏..在此先感谢...
我遇到了同样的问题,所以我创建了只显示第一个错误的自定义错误标签 - 随意使用它:
a] 创建自定义标签类
package cz.devmint.springext.web.tags.form;
import javax.servlet.jsp.JspException;
import org.apache.commons.lang.StringUtils;
import org.springframework.util.ObjectUtils;
import org.springframework.web.servlet.tags.form.ErrorsTag;
import org.springframework.web.servlet.tags.form.TagWriter;
public class ErrorsTagExt extends ErrorsTag {
private boolean firstErrorOnly = true;
public boolean isFirstErrorOnly() {
return firstErrorOnly;
}
public void setFirstErrorOnly(boolean firstErrorOnly) {
this.firstErrorOnly = firstErrorOnly;
}
@Override
protected void renderDefaultContent(TagWriter tagWriter) throws JspException {
tagWriter.startTag(getElement());
writeDefaultAttributes(tagWriter);
String delimiter = ObjectUtils.getDisplayString(evaluate("delimiter", getDelimiter()));
String[] errorMessages = getBindStatus().getErrorMessages();
for(int i = 0; i < errorMessages.length; i++) {
String errorMessage = errorMessages[i];
if (i > 0) {
tagWriter.appendValue(delimiter);
}
tagWriter.appendValue(getDisplayString(errorMessage));
if (firstErrorOnly) break;
}
tagWriter.endTag();
}
b] 要使用自定义标签,您必须创建标签库描述符 - 您可以简单地从 spring 的标签库描述符中复制 ErrorsTag 声明(在 META-INF 目录中的 spring-webmvc-3.2.1.RELEASE.jar 下 name spring-form.tld
)并添加您自己的属性 firstErrorOnly
。下面是从我的库中提取的完整示例 - 请参阅代码中可以更改和自定义的注释:
<?xml version="1.0" encoding="UTF-8"?>
<taglib xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"
version="2.0">
<description>Custom extension to Spring Framework JSP Tag Library</description>
<tlib-version>3.0</tlib-version>
<short-name>tags</short-name>
<!-- use your own uri -->
<uri>http://cz.devmint.spring-ext/tags</uri>
<tag>
<description>Renders field errors in an HTML 'span' tag.</description>
<name>errors</name>
<!-- use your own package - fully qualified name of your tag class -->
<tag-class>cz.devmint.springext.web.tags.form.ErrorsTagExt</tag-class>
<body-content>JSP</body-content>
<variable>
<name-given>messages</name-given>
<variable-class>java.util.List</variable-class>
</variable>
<!-- this attribute declaration is the only change when compare with spring's original tag definition -->
<attribute>
<description>Whether to render the first error for given field only</description>
<name>firstErrorOnly</name>
<required>false</required>
<rtexprvalue>false</rtexprvalue>
</attribute>
<attribute>
<description>Path to errors object for data binding</description>
<name>path</name>
<required>false</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
<attribute>
<description>HTML Standard Attribute</description>
<name>id</name>
<required>false</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
<attribute>
<description>Enable/disable HTML escaping of rendered values.</description>
<name>htmlEscape</name>
<required>false</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
<attribute>
<description>Delimiter for displaying multiple error messages. Defaults to the br tag.</description>
<name>delimiter</name>
<required>false</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
<attribute>
<description>Equivalent to "class" - HTML Optional Attribute</description>
<name>cssClass</name>
<required>false</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
<attribute>
<description>Equivalent to "style" - HTML Optional Attribute</description>
<name>cssStyle</name>
<required>false</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
<attribute>
<description>HTML Standard Attribute</description>
<name>lang</name>
<required>false</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
<attribute>
<description>HTML Standard Attribute</description>
<name>title</name>
<required>false</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
<attribute>
<description>HTML Standard Attribute</description>
<name>dir</name>
<required>false</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
<attribute>
<description>HTML Standard Attribute</description>
<name>tabindex</name>
<required>false</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
<attribute>
<description>HTML Event Attribute</description>
<name>onclick</name>
<required>false</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
<attribute>
<description>HTML Event Attribute</description>
<name>ondblclick</name>
<required>false</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
<attribute>
<description>HTML Event Attribute</description>
<name>onmousedown</name>
<required>false</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
<attribute>
<description>HTML Event Attribute</description>
<name>onmouseup</name>
<required>false</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
<attribute>
<description>HTML Event Attribute</description>
<name>onmouseover</name>
<required>false</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
<attribute>
<description>HTML Event Attribute</description>
<name>onmousemove</name>
<required>false</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
<attribute>
<description>HTML Event Attribute</description>
<name>onmouseout</name>
<required>false</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
<attribute>
<description>HTML Event Attribute</description>
<name>onkeypress</name>
<required>false</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
<attribute>
<description>HTML Event Attribute</description>
<name>onkeyup</name>
<required>false</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
<attribute>
<description>HTML Event Attribute</description>
<name>onkeydown</name>
<required>false</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
<attribute>
<description>Specifies the HTML element that is used to render the enclosing errors.</description>
<name>element</name>
<required>false</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
<dynamic-attributes>true</dynamic-attributes>
</tag>
</taglib>
将此xml文件放入WEB-INF/tld/spring-ext.tld
在 jsp 页面上添加声明:
<%@taglib prefix="spring-ext" uri="http://cz.devmint.spring-ext/tags" %>
代替 spring 的 ErrorsTag 使用自定义标签:
<spring-ext:errors path="dummy" firstErrorOnly="true" />
有一个关于那个的问题。您可以查看以下链接: