我想在用戶執行操作之前驗證表單中的兩個日期。所以我在一個使用ajax的p:calendar裏面有一個f:validator,問題在於f:屬性。我將開始日期作爲參數傳遞,驗證器不會收到此日期。但是,如果按動作按鈕,日期參數在驗證中。我用這個post作爲指導。 我XHTML是:JSF中的<f:validator>和ajax問題
<p:column >
<p:calendar id="txtStartDate" binding="#{txtStartDate}"
pattern="dd/MM/yyyy"
value="#{myBean.bean.startDate}">
</p:calendar>
</p:column>
<p:column>
<p:calendar id="txtEndDate"
pattern="dd/MM/yyyy"
value="#{myBean.bean.endDate}">
<f:validator validatorId="validator.dateRangeValidator" />
<f:attribute name="fromDate" value="#{txtStartDate.value}" />
<p:ajax event="dateSelect" execute="@Form" update=":formHeader:messages" />
</p:calendar>
</p:column>
和確認:
@Override
public void validate(FacesContext context, UIComponent component, Object value) throws ValidatorException {
if (value == null || component.getAttributes().get("fromDate") == null) return;
Date endDate = (Date) value;
Date startDate = (Date) component.getAttributes().get("fromDate");
if (!endDate.after(startDate)) {
FacesMessage message = new FacesMessage("End date before the start date.");
message.setSeverity(FacesMessage.SEVERITY_ERROR);
addMessageOnSession(FacesMessage.SEVERITY_ERROR, "Invalid dates");
throw new ValidatorException(message);
}
}
欣賞與任何幫助。
EL表達''{myBean.bean.startDate}'有點奇怪。是'#{myBean}'指定爲'
'? – BalusC 2013-02-15 18:37:22
不,myBean是我的@ManagedBean,它包含一個名爲bean的屬性,它擁有date屬性。 – 2013-02-15 20:25:16
所以......每行中的日曆輸入提交給同一個bean屬性,覆蓋前一行提交的所有值,直到最終只有最後一行的值爲止?爲什麼這種方法?像在
'中指定的那樣,將它們的值綁定到當前迭代的行對象是否更有意義? – BalusC 2013-02-15 20:43:27