【问题标题】:How can I validate two fields like password and confirm password in Struts 2?如何在 Struts 2 中验证密码和确认密码等两个字段?
【发布时间】:2013-12-30 07:19:14
【问题描述】:

我正在做 Web 应用程序,因为我想验证 JSP 表单中的两个字段。在注册文件中,我有很多领域。我想验证密码并确认密码字段。

下面是我的代码:

Action班级:

@Length(min = 6, max = 20)
@Column(name = "PERSON_PASSWORD", nullable = false, length = 20)
public String getPassword() {
    return password;
}

@Length(min = 6, max = 20)
@Column(name = "PERSON_CONFORMPASSWORD", nullable = false, length = 20)
public String getConformPassword() {
    return conformPassword;
}

现在,如何验证这两个字段是否包含相同的数据?

【问题讨论】:

标签: java hibernate validation struts2 annotations


【解决方案1】:

您可以使用非字段自定义验证器来验证任意数量的字段。为此,您应该创建一个自定义验证器来扩展ValidatorSupport 并实现validate 方法,该方法继承自Validator 接口但没有默认实现。您应该编写此实现来进行自定义验证。例如,您想创建一个 RetypeValidator 来验证两个字段是否具有相同的值。它可能看起来像

public class RetypeValidator extends ValidatorSupport {

  private String value = null;

  public String getValue() {
    return value;
  }
  public void setValue(String value) {
    this.value = value;
  }

  private String retypeValue = null;

  public String getRetypeValue() {
    return retypeValue;
  }

  public void setRetypeValue(String value) {
    retypeValue = value;
  }

  @Override
  public void validate(Object object) throws ValidationException {
    String value = (String) parse(this.value, String.class);
    String retypeValue = (String) parse(this.retypeValue, String.class);
    if (value != null && retypeValue != null && !value.equals(retypeValue))
      addActionError(getDefaultMessage());
  }
}

那么你必须将此验证器添加到validators.xml中的配置中:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC
        "-//Apache Struts//XWork Validator Config 1.0//EN"
        "http://struts.apache.org/dtds/xwork-validator-config-1.0.dtd">

<validators>
  <validator name="retypeValidator" class="org.custom.struts.vaidators.RetypeValidator"/>
</validators>

现在,您有了一个自定义验证器名称,您可以将其与 @CustomValidator 注释一起使用。

@Validations(
    customValidators = @CustomValidator(type="retypeValidator", message="the value and retype value should be the same",
      parameters = { @ValidationParameter( name = "value", value = "${password}" ), @ValidationParameter( name = "retypeValue", value = "${conformPassword}" )})
)

注意,passwordconformPassword 是 OGNL 表达式,用于在验证时进行解析。

【讨论】:

  • 为两个(或更多)字段(+1)提供自定义验证器的好方法
【解决方案2】:

可以使用if语句进行比较

if(password == conformPassword)
{
    //TO-DO
}
else
{
    //TO-DO
}

【讨论】:

  • 我想比较注释中的两个字段。感谢您的快速响应
  • 此代码不回答问题,应予以评论或完全删除。
【解决方案3】:
if(getPassword().equals(getConformPassword()){
{
//code
}

【讨论】:

  • 谢谢你 Manish 我想比较注释中的两个字段。谢谢你的快速回复
  • 此代码不回答问题,应予以评论或完全删除。
猜你喜欢
  • 2013-09-18
  • 2022-10-21
  • 2017-07-26
  • 1970-01-01
  • 2017-09-15
  • 2023-04-07
  • 2015-12-11
  • 2015-04-03
  • 2023-02-23
相关资源
最近更新 更多