2013-03-01 2 views
1

사용자가 새 제품 정점 페이지 작성을 중단하는 것을 방지하려고합니다. 작성 페이지에서 텍스트 필드 product_name과 숫자 필드 product_quantity가 있습니다.숫자 필드의 텍스트를 확인하는 유효성 검사

오류 처리 유효성 검사 : 그들은 product_quantity 필드에 텍스트를 입력하고 '저장'을 클릭하면

현재 그들은 다음과 같은 오류가 발생합니다.

ORA-01722 : 당신은 숫자 필드를 선택한 경우 유효하지 않은 번호가

내가 에이펙스에 생각하지만 오류를 조사 하였다

는, 사용자가 텍스트 나 숫자를 입력 여부를 감지 것인가?

사용자가 텍스트를 입력 한 경우 유효성 검사 메시지를 표시하는 방법이 있습니까? 그렇지 않으면 사용자가 새 항목을 저장할 수 있습니까?

UPDATE

나는 그것 일어나는 이유를 알고 있지만 그것을 해결하는 방법을 잘 모릅니다.

내 페이지를 다시 만들었지 만 효과가있었습니다. 그런 다음 내 페이지 처리에서 두 가지 유효성 검사를 추가하고 그 다음 시도 할 때 내 초기 게시물에서 오류가 발생합니다. 만약 내가 그들을 해제하면 다시 작동합니다. 유효성 검증은 입력 된 값이 테이블에 추가되기 전에 이미 존재하는지 여부를 판별하기 위해 NOT EXISTS를 사용합니다.

숫자 값을 입력했는지 여부를 확인한 후 유효성 확인 만 수행하는 경우. 나는 연관된 아이템을 보았을 때 유효성 검사를 중단하고 '눌렀을 때'버튼을 켰지 만 여전히 기쁨은 없습니다.

select 1 from MY_TABLE where column_name = :P6_TEXT_FIELD 

페이지 처리에서 생성 한 유효성 검사 전에 텍스트 상자 유효성 검사 (텍스트 입력 여부 확인)를 실행하는 방법이 있습니까?

+0

을 실수로 검증을 삭제 한 경우 : 당신이 사용하는 방법의 예를 찾아 정점 개발 팀의 패트릭 늑대의 블로그에이를 구현할 수
. 페이지를 재생성하고 문제가 지속되는지 확인할 수 있습니까? –

+0

필드가 텍스트 필드 또는 숫자 필드로 정의되어 있습니까? 숫자가'.' 또는','로 입력 되었습니까? – Tom

+0

@Tom 텍스트 필드 였지만 데이터베이스 열이 숫자이고 입력 된 값이 숫자이므로 기술적으로 필드가 숫자 필드 여야합니다. 숫자 유효성 검사는 다른 페이지의 필드에서 완벽하게 작동합니다. 이것은 내가 왜 이걸로 잃어버린 abit입니다. 매튜가 내일 암시하는 것을 시도하십시오. – Blob

답변

0

그게 유효성 검사의 문제입니다. 모두 실행되어 단락되지 않습니다. 페이지를 디버깅 할 때 실제로이를 분명하게 볼 수 있습니다.
숫자 입력란의 경우 번호 확인을 통과하지 못했음을 알 수 있습니다. 그러나 이것이 검증을 멈추게하지는 않습니다. 따라서 제출 된 값을 사용하는 두 번째 유효성 검사가 실행되지만 예를 들어 텍스트를 입력 할 때 분명히 실패합니다.


몇 가지 해결 방법이 있습니다. 예를 들어, 당신은 당신이-EXISTS 아니 PLSQL 함수에 대한 유효성 검사 오류 메시지를 반환 변경할 수 있으며,이 (예)처럼 뭔가를 실행합니다

DECLARE 
    v_test_nbr NUMBER; 
    v_check_exists NUMBER; 
BEGIN 
    BEGIN 
    v_test_nbr := to_number(:P6_TEXT_FIELD); 
    EXCEPTION 
    WHEN OTHERS THEN 
    -- or catch 1722 (invalid number) and 6502 (char to number conversion error) 
    v_test_nbr := NULL; 
    END; 

    IF v_test_nbr IS NOT NULL 
    THEN 
    -- if v_test_nbr is not null then the field should be numerically valid 
    -- if it isn't then this code would be skipped and this validation 
    -- will not throw an error. 
    -- However, the previous validation will still fail when text is entered, 
    -- so this shouldn't matter. 
    BEGIN 
     SELECT 1 
     INTO v_check_exists 
     FROM my_table 
     WHERE column_name = :P6_TEXT_FIELD; 
    EXCEPTION 
    WHEN no_data_found THEN 
     v_check_exists := 0; 
    END; 

    IF v_check_exists = 1 
    THEN 
     RETURN 'A record with this key already exists';  
    END IF; 
    END IF; 

    RETURN NULL; 
END; 

- 그러나 당신이 확인하고 싶은이 경우에 중복 항목의 경우 버전 4.1 이상인 경우 더 나은 옵션이 존재할 수 있습니다. 테이블에 올바른 제약 조건이 정의되어 있으면 not-exists on을 수행중인 필드에 정의 된 고유 키가 생깁니다. 즉, 필드에서이 유효성 검사를 수행하지 않으면 ora-00001 DUP_VAL_ON_INDEX 오류가 발생합니다.
그러면 apex에서 제공하는 오류 처리를 사용하여이 오류를 catch하고 사용자에게 친숙한 메시지를 생성 할 수 있습니다.궁금
apex-4-1-error-handling-improvements-part-1/
apex-4-1-error-handling-improvements-part-2/

관련 문제