아주 자주 사용하는 자바스크립트 함수중에 동적으로 폼을 생성하고, 히든 값을 추가하고, 서브밋 하는 함수를 소개하고자 한다.

물론 자바스크립트에서 [폼네임].submit(); 으로 대부분의 포스트 방식으로 페이징이 가능하지만,

그렇게 되면 HTML 상에 폼 태그가 반드시 있어야 하고, 폼의 위치나 전송방법 때문에 애를 먹는 일이 종종 있다.

그래서 얘를 조금 바꿔봤다.

 

	/* 폼: 생성 */
	function formCreate(nm,mt,at,tg) {
	 var f = document.createElement("form");
	 f.name = nm;
	 f.method = mt;
	 f.action = at;
	 f.target = tg ? tg : "_self";
	 return f;
	} 
	
	/* 폼: 인풋 생성 */
	function formInput(f,n,v) {
	 var i = document.createElement("input");
	 i.type = "hidden";
	 i.name = n;
	 i.value = v;
	 //f.appendChild(i);
	 f.insertBefore(i, null);
	 //f.insertBefore(i);
	 return f;
	}
	
	 /* 폼: 전송 */
	function formSubmit(f) {
	 document.body.appendChild(f);
	 f.submit();
	} 

이렇게 세 개의 함수를 공통으로 사용하는 js 파일에 추가한 뒤, 아래와 같이 사용한다.

 

function goCategoryPage(category_name) {
	var frm = formCreate('frmCategory','post','/main/category.do','');
	frm = formInput(frm, 'category_name', category_name);
	formSubmit(frm);	
}

1.  첫 번째 인자는 동적으로 만들 폼 이름을 정해주는 것이고,

    두 번째 인자는 포스트 방식과 겟방식 모두를 지원하기 위해 인자로 받는다.

    세 번째 인자는 이동하고자 하는 페이지다. 서버상에 존재하는 경로를 적는다.

    위의 예제에서는 '/main/category.do' <---- 요게 이동하고자 하는 페이지다.

     ( jsp를 바로 부른다고 하면 --> "/test/formtest.jsp" 이런걸 쓰면 된다.)

    네 번째 인자는 타겟인데, 페이지를 전송하는 대상이 자신이 아닌 프레임이나, 아이프레임, 혹은 팝업일 경우

    유용하게 사용할 수 있다.(포스트 방식의 팝업에 많이 썼던 것 같다.)

2.  frm = formInput(frm, 'category_name', category_name);

    얘는 동적으로 생성한 폼에 히든 값을 추가할 때 사용한다. 위의 예제에서는 'category_name' 이란 이름으로

    받아온 값을 'category_name' 이란 변수에 담아 폼에 저장해 준다. (얘를 이용하면 지저분한 폼태그와 히든 값

   넣는 태그 없이 값을 실을 수 있다.

3.  formSubmit(frm); --> 동적으로 만든 폼을 body 태그에 붙여준다. 동적으로 만들었기 때문에 메모리상에만

    존재하던 폼을 실제 HTML에 추가하고 해당 폼을 submit 해준다.

 

'/main/category.do' 라는 페이지로 category_name 의 값을 담아서 전송한다. 해당 페이지에서는 늘 하던 것 처럼

리퀘스트로 값을 받아서 처리할 수 있다.

 

'Languages > JavaScript' 카테고리의 다른 글

웹표준과 DOM Script  (0) 2012.06.27

WRITTEN BY
GrimReaper
안녕하세요 Grim Reaper의 티스토리에 오신 것을 환영합니다.

,

기억력 좋다고 까불다가 망신 당하는 일이 종종 있다.

그 정도로 그치길 다행이라 생각한다.

잘못된 기억 때문에 인생 망칠 수도 있다.

기록하고, 확인하고, 잊자. - 너무 많은 것을 기억에 의존하는 것은 도움이 되지 않는다.

기록에 의존한다 생각할 수도 있지만, 그 반대다.

얼마쯤 기간이 지났을 무렵.

어딘가에 빽빽하게 적었던 메모를 발견한다.

그리고 그 순간. 잠들었던 모든 기억들이 그 메모로 인해 깨어나기 시작한다.

그 메모를 남기던 때의 기분, 날씨, 일어났던 사건, 주위에서 들리던 소소한 일상들이....

기억하는 것은 훈련을 통해 어느정도 향상이 가능하다지만, 그 기억용량이나 신뢰성에 대해

그 누구도 입증할 수 없는 현실에 우리는 살고 있다.

이제는 인터넷은 아무 곳에서나 된다고 해도 거짓말이 안 될 정도로 좋은 환경에 우린 살고 있다.

수첩에 손으로 꼭꼭 눌러 적는 메모도 있고, 스마트폰, 노트북 ... 조금만 찾아보면 기록할 수 있는

매체들은 넘쳐난다.

오히려 그것 때문에 친한 친구들의 핸드폰 번호조차 기억하지 못하는 사람으로 퇴화되는 것도

사실이다. 그렇다. 기억하려 하지 않는다는 것도 문제이긴 하다.

불완전하고 점점 퇴화되는 기억에 의존하기보다 기록해야 한다.

기록하지 않는 다는 것은 문제를 아예

해결하지 않고 포기해 버리는 것과 같다.

적어두면 나중에라도 보고 해결할 문제를 알 수 있겠지만,

기억에 의존하면 어느 순간... 해결 할 문제가 있었다는 사실조차 잊게 될 것이다.

기록은 기억을 지배한다.

 

 


WRITTEN BY
GrimReaper
안녕하세요 Grim Reaper의 티스토리에 오신 것을 환영합니다.

,

Oracle 10g↑ 스케쥴러 관련 DBMS 명령어

자주 사용하면서도 꼭 쓸려고 할 때는 생각이 안나기에 여기 다시 정리 합니다.

 

--등록된 job

SELECT * FROM USER_SCHEDULER_JOBS;

--job의 arguments

SELECT * FROM USER_SCHEDULER_JOB_ARGS; 

--현재 running중인 job들의정보

SELECT * FROM USER_SCHEDULER_RUNNING_JOBS;

--job의 log

SELECT * FROM USER_SCHEDULER_JOB_LOG;

--job의수행된정보및Error 정보 

SELECT * FROM USER_SCHEDULER_JOB_RUN_DETAILS;

-- 등록된 Program

SELECT * FROM USER_SCHEDULER_PROGRAMS; 

-- 프로그램의 매개변수

SELECT * FROM USER_SCHEDULER_PROGRAM_ARGS; 

--등록된 스케쥴러 

SELECT * FROM USER_SCHEDULER_SCHEDULES;

-- 스케쥴 삭제 
BEGIN
        DBMS_SCHEDULER.DROP_JOB(
           JOB_NAME   => 'SCH_PROC_MSG_STATE',
           FORCE      => false);
END ; 

-- 스케쥴 시작
EXECUTE DBMS_SCHEDULER.ENABLE('SCH_PROC_MSG_STATE');

-- 스케쥴 정지
EXECUTE DBMS_SCHEDULER.DISABLE('SCH_PROC_MSG_STATE');

 

DBMS_JOB.submit : job 등록

DBMS_JOB.remove : 제거

DBMS_JOB.change : 변경

DBMS_JOB.next_date : job의 다음 수행시간 변경

DBMS_JOB.interval : job의 실행 cycle 지정

DBMS_JOB.what : job 수행 으로 등록된 object 를 변경

DBMS_JOB.run : job을 수동으로 실행

 

[등록 예제]

DECLARE
  X NUMBER;
BEGIN
  SYS.DBMS_JOB.SUBMIT
    ( job       => X 
     ,what      => '실행할 object'
     ,next_date => to_date('17-11-2007 09:00:00','dd/mm/yyyy hh24:mi:ss')
     ,interval  => 'TRUNC(SYSDATE) + 1 + 9/24'
     ,no_parse  => TRUE
    );
  SYS.DBMS_OUTPUT.PUT_LINE('Job Number is: ' || to_char(x)); -- 이부분은 job큐의 번호가 됩니다.
END;

 

BEGIN
DBMS_SCHEDULER.CREATE_JOB (
   job_name             => 'SCH_PROC_MSG_STATE_TO_DAY',
   job_type             => 'PLSQL_BLOCK',
   job_action           => 'BEGIN MEM_NPRO.TEST_PROC (TO_CHAR(SYSDATE , ''YYYYMMDD'')); END;',
   start_date           => TO_DATE('2011-12-14 17:30:00' , 'YYYY-MM-DD HH24:MI:SS'),
   repeat_interval      => 'FREQ=MINUTELY;INTERVAL=30',
   end_date             =>  NULL,
   enabled              =>  TRUE,
   comments             => 'HJ SCH_PROC_MSG_STATE_TO_DAY');
END;

 

[인터벌 설정법]

 Execute daily          'SYSDATE + 1'
 Execute once per week  'SYSDATE + 7'
 Execute hourly         'SYSDATE + 1/24'
 Execute every 10 min.  'SYSDATE + 10/1440'
 Execute every 30 sec.  'SYSDATE + 30/86400'
 Do not re-execute      NULL

1. 10분간격으로 실행
 
SYSDATE + 1/24/6
 
2. 현재 시간으로 부터 다음 날 현재 시간에 실행 (매일)
 
SYSDATE + 1    -- 지금이 오후3시면 다음날 오후 3시 에 매일매일 실행됩니다.
 
3. 매일 새벽 5시
 
TRUNC(SYSDATE) + 1 + 5 / 24
 
4. 매일 밤 10시
 
TRUNC(SYSDATE)  + 20 / 24

 

'Databases > Oracle' 카테고리의 다른 글

SUBSTR 함수 사용법  (0) 2012.07.02

WRITTEN BY
GrimReaper
안녕하세요 Grim Reaper의 티스토리에 오신 것을 환영합니다.

,