Java 弹簧&x2B;动态生成字段的有效性验证

Java 弹簧&x2B;动态生成字段的有效性验证,java,html,spring-boot,validation,thymeleaf,Java,Html,Spring Boot,Validation,Thymeleaf,我正在尝试验证动态生成的输入字段。下面的代码将为我们提供更多输入: 来自HTML的代码: <th:block th:each="word,itera : ${credentialsForm.credentialRequirements}"> <div class="rtr_credential" style="display: inline-block;"> <span th:text="${word.attribute

我正在尝试验证动态生成的输入字段。下面的代码将为我们提供更多输入:

来自HTML的代码:

 <th:block th:each="word,itera : ${credentialsForm.credentialRequirements}">
          <div class="rtr_credential" style="display: inline-block;">
            <span th:text="${word.attribute}" ></span>
            <input type="hidden"  th:name="|credentialRequirements[${itera.index}].attribute|" th:value="${word.attribute}">
          </div>
          <div class="rtr_credential" style="display: inline-block;">
            <input type="text"  name="userValue" th:field="*{credentialRequirements[__${itera.index}__].userValue}" class="userValue" maxlength="30"
              th:classappend="${#fields.hasErrors('userValue')}? has-error : ''">  
          </div>
        </th:block>

如何验证userValues,它是动态生成的,有时仅为1个属性,有时为5个属性。我也在尝试Jquery验证,但混淆了如何实现。

为什么不简单地使用
th:field
属性将HTML字段绑定到实体字段?然后,您可以添加带有错误消息的div(如果将出现验证错误):


错误消息

谢谢大家的回答和评论。 我需要交付代码,因此使用Jquery和Javascript进行验证: 请查找以下代码:

submitHandler : function(form) {
            let invalid = 0
            $(  ".userValue" ).removeClass( "has-error" )
            $( ".userValue" ).each(function() {

              if($( this ).val() == "" ) {
                invalid++
                $( this ).addClass( "has-error" );
              }
            });
            if(invalid == 0){
                //some logic
                form.submit();
            } 
        }

谢谢你的回答,我试过了,但它不起作用,根据要求,如果存在任何验证错误,我们必须以红色突出显示列,因此附加css类。你可以尝试以下操作:
到底什么不起作用?你有错误吗?或者CSS类追加不起作用?验证不起作用,字段为空,单击“保存”将请求发送到服务器而不进行任何验证。谢谢,我用Jquery和javascript解决了这个问题
public class CredentialRequirements {


    private String attribute;
    private String carrierDescription;
    @NotBlank
    @NotNull
    private String userValue;



    public CredentialRequirements() {
        super();
        // TODO Auto-generated constructor stub
    }

    public CredentialRequirements(String attribute, String carrierDescription, String userValue) {
        super();
        this.attribute = attribute;
        this.carrierDescription = carrierDescription;
        this.userValue = userValue;
    }

    public String getAttribute() {
        return attribute;
    }
    public void setAttribute(String attribute) {
        this.attribute = attribute;
    }
    public String getCarrierDescription() {
        return carrierDescription;
    }
    public void setCarrierDescription(String carrierDescription) {
        this.carrierDescription = carrierDescription;
    }


    public String getUserValue() {
        return userValue;
    }

    public void setUserValue(String userValue) {
        this.userValue = userValue;
    }

    @Override
    public String toString() {
        return "CredentialRequirements [attribute=" + attribute + ", carrierDescription=" + carrierDescription
                + "]";
    }

}
<th:block th:each="word,itera : ${credentialsForm.credentialRequirements}">
    <div class="rtr_credential" style="display: inline-block;">
        <span th:text="${word.attribute}" ></span>
        <input type="hidden" th:field="*{credentialRequirements[__${itera.index}__].attribute}">
    </div>
    <div th:if="${#fields.hasErrors('credentialRequirements[__${itera.index}__].userValue')}"  th:errors="*{credentialRequirements[__${itera.index}__].userValue}">
        Error message
    </div>
    <div class="rtr_credential" style="display: inline-block;">
        <input type="text"  name="userValue" th:field="*{credentialRequirements[__${itera.index}__].userValue}" class="userValue">  
    </div>
</th:block>
submitHandler : function(form) {
            let invalid = 0
            $(  ".userValue" ).removeClass( "has-error" )
            $( ".userValue" ).each(function() {

              if($( this ).val() == "" ) {
                invalid++
                $( this ).addClass( "has-error" );
              }
            });
            if(invalid == 0){
                //some logic
                form.submit();
            } 
        }