here is my form which has the childrenDetails list. I am able to validate all other attributes except this list. please help
<form:form commandName="family"
action="${pageContext.request.contextPath}/user/family" method="POST"
id="family-form" novalidate="novalidate">
<table>
<tr>
<c:set var="marraigeStat" value="married" />
<c:if test="${personalDetials.marriageStatus eq marraigeStat}">
<tr>
<td><form:label path="spousesName">Name of Spouse</form:label>
</td>
<td><form:input path="spousesName" id="spousesName" /></td>
</tr>
<tr>
<td><form:label path="spousesAge">Spouses Age</form:label>
<td><form:input path="spousesAge" id="spousesAge" />
</tr>
<tr>
<td><form:label path="weddingDate">Wedding Date</form:label></td>
<td><form:input path="weddingDate" type="date"
name="weddingDate" id="weddingDate" /></td>
<td><form:errors path="weddingDate" /></td>
</tr>
</c:if>
</tr>
<tr>
<td><form:label path="fatherName">Father Name</form:label></td>
<td><form:input path="fatherName" id="fatherName" /></td>
</tr>
<tr>
<td><form:label path="motherName">Mother Name</form:label></td>
<td><form:input path="motherName" id="motherName" /></td>
</tr>
<tr>
<td><form:label path="fatherAge">Father Age</form:label></td>
<td><form:input path="fatherAge" type="date" name="fatherAge"
id="fatherAge" /></td>
</tr>
<tr>
<td><form:label path="motherAge">Mother Age</form:label></td>
<td><form:input path="motherAge" type="date" name="motherAge"
id="motherAge" /></td>
</tr>
<tr>
<c:set var="childerStat" value="true" />
<c:if test="${personalDetials.childerStatus eq childerStat}">
<h5>child should be there</h5>
<c:forEach items="${family.childrenDetails}" varStatus="status">
<tr>
<td><form:label
path="childrenDetails[${status.index}].childName"> Child Name</form:label>
<td><form:input
path="childrenDetails[${status.index}].childName" id="childName" /></td>
<td><form:label
path="childrenDetails[${status.index}].childGender">Child Gender</form:label>
</td>
<td><form:radiobutton
path="childrenDetails[${status.index}].childGender" value="male"
label="male" id="childGender" /></td>
<td><form:radiobutton
path="childrenDetails[${status.index}].childGender"
value="female" label="female" id="childGender" /></td>
<td><form:radiobutton
path="childrenDetails[${status.index}].childGender"
value="others" label="others" id="childGender" /></td>
<td><form:label
path="childrenDetails[${status.index}].childDob">Child Date of Birth</form:label></td>
<td><form:input
path="childrenDetails[${status.index}].childDob" type="date" id="childDob"/></td>
<td><form:label
path="childrenDetails[${status.index}].childCompanyName">Child Company Name</form:label></td>
<td><form:input
path="childrenDetails[${status.index}].childCompanyName" id="childCompanyName" /></td>
<td><form:label
path="childrenDetails[${status.index}].childPosition">Child Position</form:label></td>
<td><form:input
path="childrenDetails[${status.index}].childPosition" id="childPosition" /></td>
</tr>
</c:forEach>
<tr>
<c:if test="${familyDetails.getChildrenDetails().size()!=0 }">
<td><form:button name="submit" value="ADD">ADD</form:button></td>
<td><form:button name="submit" value="REMOVE">REMOVE</form:button></td>
</c:if>
</tr>
</c:if>
<c:if test="${family.childrenDetails != null }">
<tr>
<td><h2>CHILD DISPLAY</h2></td>
<tr>
<th>Child Name</th>
<th>childGender</th>
<th>childDob</th>
<th>childCompanyName</th>
<th>childPosition</th>
</tr>
<tr>
<c:forEach items="${family.childrenDetails}" var="child"
varStatus="status">
<tr>
<td>${child.childName}</td>
<td>${child.childGender}</td>
<td>${child.childDob}</td>
<td>${child.childCompanyName}</td>
<td>${child.childPosition}</td>
</tr>
</c:forEach>
</tr>
</c:if>
</tr>
in the able code i have to this of children details where i have assigned the id for each attributes of the list. And now with the help of this id's i am trying to validate the fields. My validations are not working only for the childrenDetails list which is inside the family. here is my javascript for validation
$(function() {
$("#family-form").validate({
rules : {
spousesName : "required",
spousesAge : "required",
weddingDate : "required",
fatherName : "required",
motherName : "required",
fatherAge : "required",
motherAge : "required",
childName : "required",
childGender : "required",
childDob : "required",
childCompanyName : "required",
childPosition : "required"
},
messages : {
spousesName : "please enter your spouses name",
spousesAge : "Please enter the age of your spouses",
weddingDate : "what is your wedding date",
fatherName : "please enter your father name",
motherName : "please enter your mother name",
fatherAge : "please enter your father age",
motherAge : "please enter your mothers age",
childName : "required",
childGender : "required",
childDob : "required",
childCompanyName : "required",
childPosition : "required"
},
submitHandler : function(form) {
form.submit();
}
});
});
function goBack(){
window.history.back();
}
please help. Thanks in advance
There could be two reasons for the Validation not working.
id : MAIN IssueOk, The problem lies on the UN-uniqueness of the id in the DOM. So, The Basic principle is that id attribute should be unique on the whole rendered document.
<c:forEach items="${family.childrenDetails}" varStatus="status">
<tr>
<td>
<form:label path="childrenDetails[${status.index}].childName">Child Name</form:label>
<td>
<form:input path="childrenDetails[${status.index}].childName" id="childName" />
</td>
<td>
<form:label path="childrenDetails[${status.index}].childGender">Child Gender</form:label>
//So In this block childName id will be duplicate if more than one children exists
So, Here is the example on the similar issue you are facing when id is duplicate :
So, The solution would be to use class selector instead of id for the Validation. Which you can use as :
$('#family-form').validate({
rules : {
spousesName : "required",
spousesAge : "required",
weddingDate : "required",
fatherName : "required",
motherName : "required",
fatherAge : "required",
motherAge : "required",
},
messages : {
spousesName : "please enter your spouses name",
spousesAge : "Please enter the age of your spouses",
weddingDate : "what is your wedding date",
fatherName : "please enter your father name",
motherName : "please enter your mother name",
fatherAge : "please enter your father age",
motherAge : "please enter your mothers age",
},
submitHandler : function(form) {
form.submit();
}
});
$('.childNameValidation').each(function() {
$(this).rules('add', {
required: true,
messages: {
required: "Child Name is invalid",
}
});
});
It could be hectic to define such for each and every other element though. But, It should do the job.
Needs to include : http://ajax.aspnetcdn.com/ajax/jquery.validate/1.11.0/additional-methods.js
Please follow this : Adding jQuery validator rules to dynamically created elements in ASP
The easiest solution for this problem might be using the data-attribute on the form element itself :
See : Declaring jQuery Validate plugin rules -- attribute vs. class vs. code
The solution mentioned above is just my intuitive guess. So, It might or mightn't solve the issue you are facing.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With