मैंने देखा कि यह सवाल पूछा गया था, लेकिन इसका सही उत्तर नहीं दिया गया है।जेएसएफ एच में क्रॉस फील्ड सत्यापन: पी का उपयोग कर डेटाटेबल: कैलेंडर
मैं एक datatable कि दो कॉलम प्रारंभ दिनांक और समाप्ति दिनांक है की है। दोनों में प्राइमफेस पी: कैलेंडर नियंत्रण शामिल हैं। मुझे यह सुनिश्चित करने की ज़रूरत है कि प्रत्येक पंक्ति के लिए कॉलम 1 में दिनांक कॉलम 2 की तारीख के बाद नहीं है। मैं इसे जेएसएफ सत्यापन ढांचे में जोड़ना चाहता हूं, लेकिन मुझे परेशानी हो रही है।
मैं datatable rowStatePreserved = "true" अंकन की कोशिश की है, यह मेरे मूल्यों को प्राप्त करने की अनुमति देता है, लेकिन कुछ अभी भी जब यह विफल के रूप में गलत है, पहली पंक्ति में सभी मूल्यों को अन्य सभी मान के ऊपर लिख। मैं गलत क्या कर रहा हूं, या क्या मुझे पूरी तरह से अलग रणनीति का उपयोग करना चाहिए?
एक्सएचटीएमएल कोड
<h:form>
<f:event type="postValidate" listener="#{bean.doCrossFieldValidation}"/>
<p:dataTable id="eventDaysTable" value="#{course.courseSchedules}" var="_eventDay" styleClass="compactDataTable"
>
<p:column id="eventDayStartColumn">
<f:facet name="header">
Start
</f:facet>
<p:calendar id="startDate" required="true" value="#{_eventDay.startTime}" pattern="MM/dd/yyyy hh:mm a"/>
</p:column>
<p:column id="eventDayEndColumn">
<f:facet name="header">
End
</f:facet>
<p:calendar id="endDate" required="true" value="#{_eventDay.endTime}" pattern="MM/dd/yyyy hh:mm a"/>
</p:column>
</p:dataTable>
</h:form>
validationCode
public void doCrossFieldValidation(ComponentSystemEvent cse) {
UIData eventsDaysStable = (UIData) cse.getComponent().findComponent("eventDaysTable");
if (null != eventsDaysStable && eventsDaysStable.isRendered()) {
Iterator<UIComponent> startDateCalendarIterator = eventsDaysStable.findComponent("eventDayStartColumn").getChildren().iterator();
Iterator<UIComponent> endDateCalendarIterator = eventsDaysStable.findComponent("eventDayEndColumn").getChildren().iterator();
while (startDateCalendarIterator.hasNext() && endDateCalendarIterator.hasNext()) {
org.primefaces.component.calendar.Calendar startDateComponent = (org.primefaces.component.calendar.Calendar) startDateCalendarIterator.next();
org.primefaces.component.calendar.Calendar endDateComponent = (org.primefaces.component.calendar.Calendar) endDateCalendarIterator.next();
Date startDate = (Date) startDateComponent.getValue();
Date endDate = (Date) endDateComponent.getValue();
if (null != startDate && null != endDate && startDate.after(endDate)) {
eventScheduleChronologyOk = false;
startDateComponent.setValid(false);
endDateComponent.setValid(false);
}
}
if (!eventScheduleChronologyOk) {
showErrorMessage(ProductManagementMessage.PRODUCT_SCHEDULE_OUT_OF_ORDER);
}
}
}
बिल्कुल मुझे क्या चाहिए –
आपका स्वागत है। – BalusC
@ बाल्लूसी क्रॉस-फील्ड और क्रॉस-पंक्ति सत्यापन को सत्यापित करने की रणनीति क्या होनी चाहिए? –