2013-04-08 108 views
3

是否可以在頁面加載時執行驗證,無論它是提交還是剛加載?apex始終執行驗證

我需要實現它來處理頁面部分中創建的普通驗證以及分配給數字字段的最小最大驗證。

是否可以實現?

+0

的驗證 「上提交」 分支?你能解釋一下你的問題嗎? – Tom 2013-04-10 13:44:12

+0

@Tom,我有兩個定義日期範圍的日期選擇器。 「從......開始」的日期應該不晚於'到'日期。在頁面處理中定義的頁面上有驗證。使用錯誤的日期時,驗證應用於使用按鈕提交頁面時,但在提交驗證不適用且日期選取器包含錯誤日期('from'晚於'到'日期)時重新加載頁面。 – 2013-04-10 16:59:46

+0

它會通過javascript來限制日期選擇器嗎?當然,您仍然應該始終進行服務器端驗證,以確保安全。這聽起來像你還沒有服務器驗證 - 或者我得到這個錯誤? – Tom 2013-04-10 19:38:59

回答

1

的確:服務器端驗證會引發錯誤,但頁面已提交,因此更改的值處於會話狀態。您可以嘗試通過進行plsql驗證來防止這種情況發生,即在發生錯誤時會將會話狀態值清空,但可能不是最佳狀態。我認爲一些JavaScript可以解決一些麻煩。

這裏有一些javascript限制了datepickers中的可選範圍。它不會允許用戶從迄今爲止選擇較大的,反之亦然。它還將該項目設置爲只讀,以便用戶必須通過日期選擇器進行選擇並且不能手動更改。

首頁>的JavaScript>函數和全局變量聲明

function f_check_date(){ 
    var lFrom = $("#P6_DATE_FROM").datepicker("getDate"), 
     lTo = $("#P6_DATE_TO").datepicker("getDate"); 

    if(lFrom > lTo || lTo < lFrom){ 
    //in case it does happen 
    $("#P6_DATE_FROM").val(''); 
    $("#P6_DATE_FROM").val(''); 
    alert('Please select a valid date range.'); 
    } else { 
    //when a date changes, the other datepicker has to be altered so the 
    //range is adjusted 
    $("#P6_DATE_FROM").datepicker("option","maxDate",lTo); 
    $("#P6_DATE_TO").datepicker("option","minDate",lFrom); 
    }; 
}; 

動態操作,頁面加載,執行JavaScript這是在定義

//on load, set the datepicker range in case a date is already present 
//when the date changes, call the datecheck function 
//and set item to readonly 
$("#P6_DATE_FROM") 
.datepicker("option","maxDate",$("#P6_DATE_TO").datepicker("getDate")) 
.change(f_check_date) 
.prop("readonly",true); 
$("#P6_DATE_TO") 
.datepicker("option","minDate",$("#P6_DATE_FROM").datepicker("getDate")) 
.change(f_check_date) 
.prop("readonly",true); 
+0

謝謝,不幸的是,這似乎是一個弱解決方法。而使用JavaScript將需要重複驗證碼。我想要的是在頁面加載時執行驗證,或者在驗證失敗的情況下將項目重置爲默認值。 – 2013-04-23 14:37:18

+0

我不同意並同意。這是一種解決方法嗎?從意義上說,是的。它是否改善用戶體驗?在我看來它確實如此。用戶界面響應用戶正在做什麼,並且這些字段確實與彼此具有交互性。它還可以防止用戶輸入錯誤的日期範圍,這在我看來可以緩解很多問題。將它與服務器端驗證相結合,這可以是一個真正的驗證並且不需要過程,而且功能強大。如果仍然存在錯誤的範圍,那麼用戶應該明白該做什麼。如果你有報告取決於日期,你可以改變他們的SQL。 – Tom 2013-04-24 12:44:59

+0

爲了進一步闡述我想指出的代碼是非常非常便攜的。這只是javascript。你可以用2個輸入參數(從和到日期字段ID)創建一個函數,並把它放在一個文件中。只需一個電話就可以完成上述所有工作。你甚至可以使這個動態插件。畢竟,你可能認爲apex中的所有內容都很難使用,因爲即使是一個簡單的驗證也需要複製到類似的字段並創建重複。 – Tom 2013-04-24 12:48:05