この質問は尋ねられましたが、正しく回答されていません。jsfのクロスフィールド検証h:p:calendarを使用したデータテーブル
私は2つの列開始日と終了日を持つデータテーブルを持っています。どちらも、primeface p:カレンダーコントロールを含んでいます。私は、column1の日付がcolumn2の日付の後でないことを各行に対して保証する必要があります。これをJSF検証フレームワークに結びつけたいのですが、問題があります。
データテーブルrowStatePreserved = "true"をマークしようとしましたが、値を取得できますが、失敗したときに最初の行のすべての値が他のすべての値を上書きします。私は何が間違っているのですか、まったく違う戦略をとっていますか?
XHTMLコード
<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
@BalusCクロスフィールド検証とクロスロー検証を検証する戦略は何ですか? –