Codenameone 使用验证器验证表单

Codenameone 使用验证器验证表单,codenameone,Codenameone,在验证器组件上,我需要计算哪个textfield出错,我找到了一个Isvalid()方法,但对我的porpuse无效,因为我不知道哪个值出错 我如何知道哪个约束和组件无效 这不是公开的 关于我不确定您是否使用了正确的验证器,因为您没有提供任何代码。但是,下面的代码应该可以帮助您开始: 使用单个验证器进行验证: import com.codename1.ui.validation.LengthConstraint; import com.codename1.ui.validation.Regex

在验证器组件上,我需要计算哪个textfield出错,我找到了一个Isvalid()方法,但对我的porpuse无效,因为我不知道哪个值出错

我如何知道哪个约束和组件无效

这不是公开的


关于我不确定您是否使用了正确的
验证器,因为您没有提供任何代码。但是,下面的代码应该可以帮助您开始:

使用单个验证器进行验证:

import com.codename1.ui.validation.LengthConstraint;
import com.codename1.ui.validation.RegexConstraint;
import com.codename1.ui.validation.Validator;

.
.
.

Validator val = new Validator();
val.setValidationFailureHighlightMode(Validator.HighlightMode.UIID);
val.addConstraint(emailField, RegexConstraint.validEmail())
   .addConstraint(passwordField, new LengthConstraint(6));

if (val.isValid()) {
    System.out.println("All validated fields pass the constraints");
} else {
    // show dialog here
}
import com.codename1.ui.validation.LengthConstraint;
import com.codename1.ui.validation.RegexConstraint;
import com.codename1.ui.validation.Validator;

.
.
.

Validator valEmail = new Validator();
valEmail.setValidationFailureHighlightMode(Validator.HighlightMode.UIID);
valEmail.addConstraint(emailField, RegexConstraint.validEmail());
if (valEmail.isValid()) {
    System.out.println("Email field passes the constraint");
} else {
    // show dialog here
}

Validator valPassword = new Validator();
valPassword.setValidationFailureHighlightMode(Validator.HighlightMode.UIID);
valPassword.addConstraint(passwordField, new LengthConstraint(6));

if (valPassword.isValid()) {
    System.out.println("Password field passes the constraint");
} else {
    // show dialog here
}
import com.codename1.ui.validation.LengthConstraint;
import com.codename1.ui.validation.RegexConstraint;
import com.codename1.ui.validation.Validator;
import com.codename1.ui.*;

.
.
.

TextComponent email = new TextComponent().constraint(TextArea.EMAILADDR)
        .labelAndHint("Email").focusAnimation(false);
email.setName("email");

TextComponent password = new TextComponentPassword()
        .labelAndHint("Password").focusAnimation(false);
password.setName("password");

Button submit = new Button("Submit");

Validator val = new Validator();
val.setValidationFailureHighlightMode(Validator.HighlightMode.UIID);
val.addSubmitButtons(submit)
        .addConstraint(email, RegexConstraint.validEmail())
        .addConstraint(password, new LengthConstraint(6));
使用单个验证器进行验证:

import com.codename1.ui.validation.LengthConstraint;
import com.codename1.ui.validation.RegexConstraint;
import com.codename1.ui.validation.Validator;

.
.
.

Validator val = new Validator();
val.setValidationFailureHighlightMode(Validator.HighlightMode.UIID);
val.addConstraint(emailField, RegexConstraint.validEmail())
   .addConstraint(passwordField, new LengthConstraint(6));

if (val.isValid()) {
    System.out.println("All validated fields pass the constraints");
} else {
    // show dialog here
}
import com.codename1.ui.validation.LengthConstraint;
import com.codename1.ui.validation.RegexConstraint;
import com.codename1.ui.validation.Validator;

.
.
.

Validator valEmail = new Validator();
valEmail.setValidationFailureHighlightMode(Validator.HighlightMode.UIID);
valEmail.addConstraint(emailField, RegexConstraint.validEmail());
if (valEmail.isValid()) {
    System.out.println("Email field passes the constraint");
} else {
    // show dialog here
}

Validator valPassword = new Validator();
valPassword.setValidationFailureHighlightMode(Validator.HighlightMode.UIID);
valPassword.addConstraint(passwordField, new LengthConstraint(6));

if (valPassword.isValid()) {
    System.out.println("Password field passes the constraint");
} else {
    // show dialog here
}
import com.codename1.ui.validation.LengthConstraint;
import com.codename1.ui.validation.RegexConstraint;
import com.codename1.ui.validation.Validator;
import com.codename1.ui.*;

.
.
.

TextComponent email = new TextComponent().constraint(TextArea.EMAILADDR)
        .labelAndHint("Email").focusAnimation(false);
email.setName("email");

TextComponent password = new TextComponentPassword()
        .labelAndHint("Password").focusAnimation(false);
password.setName("password");

Button submit = new Button("Submit");

Validator val = new Validator();
val.setValidationFailureHighlightMode(Validator.HighlightMode.UIID);
val.addSubmitButtons(submit)
        .addConstraint(email, RegexConstraint.validEmail())
        .addConstraint(password, new LengthConstraint(6));
除上述内容外,我建议使用TextComponent,因为它将在每个组件下方无缝显示错误消息,而无需对话框。

作为奖励,您甚至可以禁用“提交”按钮,直到所有已验证的字段都有效:

import com.codename1.ui.validation.LengthConstraint;
import com.codename1.ui.validation.RegexConstraint;
import com.codename1.ui.validation.Validator;

.
.
.

Validator val = new Validator();
val.setValidationFailureHighlightMode(Validator.HighlightMode.UIID);
val.addConstraint(emailField, RegexConstraint.validEmail())
   .addConstraint(passwordField, new LengthConstraint(6));

if (val.isValid()) {
    System.out.println("All validated fields pass the constraints");
} else {
    // show dialog here
}
import com.codename1.ui.validation.LengthConstraint;
import com.codename1.ui.validation.RegexConstraint;
import com.codename1.ui.validation.Validator;

.
.
.

Validator valEmail = new Validator();
valEmail.setValidationFailureHighlightMode(Validator.HighlightMode.UIID);
valEmail.addConstraint(emailField, RegexConstraint.validEmail());
if (valEmail.isValid()) {
    System.out.println("Email field passes the constraint");
} else {
    // show dialog here
}

Validator valPassword = new Validator();
valPassword.setValidationFailureHighlightMode(Validator.HighlightMode.UIID);
valPassword.addConstraint(passwordField, new LengthConstraint(6));

if (valPassword.isValid()) {
    System.out.println("Password field passes the constraint");
} else {
    // show dialog here
}
import com.codename1.ui.validation.LengthConstraint;
import com.codename1.ui.validation.RegexConstraint;
import com.codename1.ui.validation.Validator;
import com.codename1.ui.*;

.
.
.

TextComponent email = new TextComponent().constraint(TextArea.EMAILADDR)
        .labelAndHint("Email").focusAnimation(false);
email.setName("email");

TextComponent password = new TextComponentPassword()
        .labelAndHint("Password").focusAnimation(false);
password.setName("password");

Button submit = new Button("Submit");

Validator val = new Validator();
val.setValidationFailureHighlightMode(Validator.HighlightMode.UIID);
val.addSubmitButtons(submit)
        .addConstraint(email, RegexConstraint.validEmail())
        .addConstraint(password, new LengthConstraint(6));

感谢Diamond,这就是问题所在,y需要评估每个组件,因为y希望显示每个文本字段的自定义对话框。只有一个唯一的isValid方法,我需要在出错时查找textField。您可以单独验证这些字段。通过多个示例查看更新的答案。非常感谢Diamond,我从来没有使用TextComponent(我不知道这个组件)来解决我的问题。y创建了一个单独的约束变量,如果isValid global Response为false,则y评估每个约束,为了获取消息,我使用了来自验证程序的getMessage,并将其传递给每个组件。