首页 > 解决方案 > 如何验证以百里香叶形式提交的一对多文件

问题描述

我正在使用 Thymeleaf 和 Spring Boot Controller 验证动态创建的字段,其中我对相同形式的两个实体使用一对多关系。但是当我写 th:if 条件来显示错误时它会抛出一个错误。

<input type="hidden" value="0" id="tableRowCount" >
                        <table class="table table-borderless" id="myTable">
                            <thead>
                                <tr>
                                    <th>Designation <span style="color: #ff0000">*</span>
                                    </th>
        
                                    <th>Officer Name <span style="color: #ff0000">*</span>
                                    </th>
                                    <th>Organization Categories <span style="color: #ff0000">*</span>
                                    </th>
                                    <th id="othertextnew">Other Organization <span
                                        style="color: #ff0000">*</span>
                                    </th>
                                    <th>Department Name <span style="color: #ff0000">*</span>
                                    </th>
                                    <th>SubDepartment Name <span style="color: #ff0000">*</span>
                                    </th>
        
                                    <th>Address 1 <span style="color: #ff0000">*</span>
                                    </th>
                                    <th>Address 2</th>
                                    <th>City/Town/Village</th>
                                    <th>Phone Number</th>
                                    <th>Email</th>
                                    <th>Pin</th>
                                </tr>
                            </thead>
                            <tbody id="dynamicTableContents">
                                <tr id="row_0">
                                    <td>
                                        <div class="form-group required">
                                            <input type="text" class="form-control bill"
                                                th:field="${complainantBean.respondent[0].respondentDesignationname}"
                                                placeholder="Please fill Desgination of the Officer">
                                            <small>Error message</small><span style="color: red;"
                                                class="error" id="designationError"></span> <span
                                                th:if="${#fields.hasErrors('complainantBean.respondent[0].respondentDesignationname')}"
                                                th:errors="*{complainantBean.respondent[0].respondentDesignationname}"
                                                id="erroraddressOfOrg1" class="help-block"></span>
                                        </div>
                                    </td>
        
                                    <td>
                                        <div class="form-group required">
                                            <input type="text"
                                                th:field="${complainantBean.respondent[0].respondentOfficerName}"
                                                class="form-control bill"
                                                placeholder="Please fill Officer Name">
                                        </div>
                                    </td>
                                    <td>
                                        <div>
                                            <select class="form-control bill orgId" id="orgId_0"
                                                th:field="${complainantBean.respondent[0].respondentorgCode}"
                                                onchange="updateSubOrgCode('0');">
                                                <option value='-1'>SELECT</option>
                                                <option th:each="ob:${orgList}" th:value="${ob.orgCode}"
                                                    th:text="${ob.orgName}" /></option>
                                            </select>
                                        </div>
                                    </td>
                                    <td><input id="othertext_0" style="display: none;"
                                        type="text"
                                        th:field="${complainantBean.respondent[0].respondentothersOrg}"
                                        class="form-control bill othertextclass"
                                        placeholder="Please fill Other Org Name"></td>
                                    <td>
                                        <div>
                                            <select id="suborgCode_0"
                                                th:field="${complainantBean.respondent[0].respondentsubOrgCode}"
                                                class="form-control bill"
                                                onchange="updateSubDepartmentCode('0');">
                                                <option value='-1'>SELECT</option>
                                                <option th:each="ob:${suborgCode}" th:value="${ob.subOrgCode}"
                                                    th:text="${ob.subOrgName}" /></option>
                                            </select>
                                        </div>
                                    </td>
                                    <td>
                                        <div>
                                            <select id="subDepartment_0"
                                                th:field="${complainantBean.respondent[0].respondentdepartmentCode}"
                                                class="form-control bill">
                                                <option value='-1'>SELECT</option>
                                                <option th:each="ob:${department}" th:value="${ob.deptCode}"
                                                    th:text="${ob.deptName}" /></option>
                                            </select>
                                        </div>
                                    </td>
        
                                    <td>
                                        <div class="form-group required">
                                            <input type="text"
                                                th:field="${complainantBean.respondent[0].respondentAddressone}"
                                                class="form-control bill"
                                                placeholder="Please fill Respondent Address1">
                                        </div>
                                    </td>
                                    <td>
                                        <div>
                                            <input type="text" class="form-control bill"
                                                th:field="${complainantBean.respondent[0].respondentAddresstwo}"
                                                placeholder="Please fill Respondent Address 2">
                                        </div>
                                    </td>
        
                                    <td>
                                        <div>
                                            <input type="text"
                                                th:field="${complainantBean.respondent[0].citytownvillage}"
                                                class="form-control bill"
                                                placeholder="Please fill Respondent City/Town/Village">
                                        </div>
                                    </td>
        
                                    <td>
                                        <div class="form-group required">
                                            <input type="text"
                                                th:field="${complainantBean.respondent[0].respondentTelephoneNumber}"
                                                class="form-control bill"
                                                placeholder="Please fill Respondent Telephone Number">
                                        </div>
                                    </td>
        
                                    <td>
                                        <div>
                                            <input type="text"
                                                th:field="${complainantBean.respondent[0].respondentEmail}"
                                                class="form-control bill"
                                                placeholder="Please fill Respondent Email">
                                        </div>
                                    </td>
        
                                    <td>
                                        <div>
                                            <input type="text"
                                                th:field="${complainantBean.respondent[0].respondentpincode}"
                                                class="form-control bill"
                                                placeholder="Please fill Respondent Pin Code">
                                        </div>
                                    </td>
        
                                </tr>
                                <tr>
                                    <td colspan="25" align="right" class="tblcontent"
                                        style="border-top: none">
                                        <button type="button" name="addBill" id="add"
                                            onclick="addRow();" class="btn btn-sm btn-success mt-2">
                                            <i class="fas fa-plus"></i>
                                        </button>
        
                                    </td>
                                </tr>
                            </tbody>
                        </table>

这是控制器代码

@PostMapping("/complainant-save")
public ModelAndView ComplaintSaveComplainant(
        @Valid @ModelAttribute("complainantBean") ComplainantBean complaintBean, BindingResult br,
        Authentication authentication, ModelAndView mv) {
    System.out.println("Data in ComplainantBean is " + complaintBean);
    if (!br.hasErrors()) {

        ComplaintDto complaintDto = complaintService.complaintentSaveProcess(complaintBean);
        mv.addObject("refno", complaintDto.getRefno());
        mv.setViewName("grivance-save");
        return mv;

    } else {

        mv.addObject("stateList", stateRepository.findAll());
        mv.addObject("district_dc", districtRepository.findByStatecodeid(complaintBean.getCertificateIssueState()));
        mv.addObject("district_r", districtRepository.findByStatecodeid(complaintBean.getrState()));
        mv.addObject("district_res", districtRepository.findByStatecodeid(complaintBean.getStateOfOrg()));
        mv.addObject("orgList", orgCategoriseRepositry.findAll());
        mv.addObject("disability", disabilityRepo.findAll());
        mv.addObject("caseTypeList", caseTypeRepo.findAll());
        //mv.addObject("suborgCode", subOrgRepositry.findByOrgcode(complaintBean.getOrgCode()));
        //mv.addObject("department", departmentRepo.findBysubOrgCode(complaintBean.getSubOrgCode()));
        mv.addObject("complaintBean", complaintBean);
        //mv.addObject("respondents", respondent);
        mv.setViewName("complainant");
        return mv;
    }

}
      
 this is ComplainantBean where I have used Respondent Entity
    
       public List<Respondent> respondent;
    public List<Respondent> getRespondent() {
            return respondent;
        }
    
        public void setRespondent(List<Respondent> respondent) {
            this.respondent = respondent;
        }

对于 ComplainantBean,我使用了 DTO,即 ComplaintDto,我将映射映射到响应实体

 @OneToMany(cascade = CascadeType.ALL)
    @JoinColumn(name = "ref_no")
    public List<Respondent> respondent;
    public List<Respondent> getRespondent() {
        return respondent;
    }

    public void setRespondent(List<Respondent> respondent) {
        this.respondent = respondent;
    }

最后在 ComplaintDto 表中保存了 ComplainantBean 和响应实体的数据,但是当我要对响应实体字段进行验证时,它会抛出错误。请帮我。

标签: springspring-bootthymeleaf

解决方案


推荐阅读