addValidator()方法不起作用

@Override
public Field createField(Item item, Object propertyId, Component uiContext) {
final String TF_WIDTH = “140px”;
Field f = super.createField(item, propertyId, uiContext);
TextField tf = null;
if (“staffName”.equals(propertyId)) {
tf = (TextField) f;
tf.setCaption(“姓名”);
tf.setRequired(true);
tf.setRequiredError(“请输入姓名”);
tf.addValidator(new NullValidator(“姓名不能为空”, false));
} else if (“identityCard”.equals(propertyId)) {
tf = (TextField) f;
tf.setCaption(“身份证”);
tf.setRequired(true);
tf.setNullRepresentation(“”);
tf.setRequiredError(“身份证不能为空”);
tf.addValidator(new RegexpValidator(
"[1]
([0-9]
{16}|[0-9]
{13})[xX0-9]
$", “身份证号只能是15或者18位!”));

只提示setRequiredError(“”);里的错误 不提示addValidator();里的错误
这是什么问题


  1. 1-9 ↩︎

setRequired 和 addValidator 是两个不一样的东西/机制。 我猜你是把Field放在Form/FormLayout里?不是的话请指正。
Form/FormLayout已经不推荐使用了,做验证现在一般使用FieldGroup+Validator. 你可以看下这个例子
http://morevaadin.com/content/bean-validation-and-vaadin-comprehensive-example/
.

p.s. 代码可以放在code标签里,读的人会比较容易看

谢谢,我是把控件放进Form中的GridLayout里,目前项目开发环境还是6.8.4的没有你说的这个FieldGroup,它是7.+里的么

不好意思, FieldGroup是Vaadin7的。requiredErrorMessage会自动显示,Validator的ErrorMessage要自己setComponentError, 比如


id.addListener(new BlurListener()
	{

		public void blur(BlurEvent event)
		{
			if(id.isValid())
			{
				id.setComponentError(id.getErrorMessage());
			}
		}
	});