상세 컨텐츠

본문 제목

[WML 기초강좌] 12. 태스크와 이벤트 (1)

프로그래밍/Mobile

by 라제폰 2008. 12. 13. 19:09

본문

이 장에서는 저번장에 잠깐 봤었던 태스크에 대한 직접적인 예제와 이벤트에 대해 알아보겠습니다.
WML에서 태스크와 이벤트는 매우 여러 곳에 사용되기때문에 잘 알아두셔야 합니다.

1. <go> 태스크

이름 그대로 <go> 태스크는 다른 카드로 이동하는 동작은 나타냅니다.
<go> 태스크에는 세가지 속성이 있습니다.

href 속성 - 주어진 URL로 이동한다.
method 속성 - 다른 데크(혹은 카드)를 가져오기 위해 사용하는 방법을 정한다. get, post
sendreferer 속성 - true로 설정되면 현재데크의 URL값이 보내진다.

href=" " 이것은 말그대로 다른 URL, 데크, 혹은 카드로 이동하는 속성이지요.
sendreferer는 나중에 소스에서 사용하게 되면 설명 드리겠습니다.

조금 깊게 볼만한 것은 method 인데요. HTML을 사용해보셨던 분이라면
<form>태그의 method="post" 이런 형식을 아실텐데요.
WML에서는 이를 <go>태그로 처리하는 것일뿐 방식은 거의 비슷 합니다.

method="get" 혹은 method="post"라는 것은 지정한 방법으로
다른 문서로 어떤 값 혹은 메시지를 전달 하는것입니다.
여기서 get 방식으로 보낸것과 post로 보내는 것은 각각 차이점과 장단점이 있습니다.

먼저 get방식은 정보들이 URL 형식으로 전달됩니다.
예를들어 숫자 20이라는 값이 저장된 변수 x와
숫자 30이라는 값이 저장된 변수 y를 ex.wml로 보낸다고 가정했을때는

<go href="ex.wml?x=20&y=30" method="get" />

이렇게 되는 것입니다.
이렇게 URL방식을 이용하기때문에 사용이 편한 장점이 있지만
웹서버에는 URL들 내용이 어딘가의 로그에 저장되기 때문에 보안측면에서 단점이 있습니다.

다음..post 방식은 get처럼 URL로 정보 전달을 하는 것이 아닌
데이터를 URL과 별도로 전송하기 때문에 보안측면에서는 장점을 가지고 있습니다.
다음은 post방식으로 숫자 20이라는 값이 저장된 변수 x와
숫자 30이라는 값이 저장된 변수 y를 ex.wml로 보내는 예제입니다.

<go method="post" href="ex.wml">
<postfield name="x" value="20" />
<postfield name="y" value="30" />
</go>

이렇게 postfield라는 요소를 이용해주면 됩니다.
postfield는 특별한 옵션없이 name과 value만을 이용해 위처럼 구현해 주면 됩니다.

이 get과 post부분은 매우 중요하니 꼭 잘 알아두세요..
아무래도 문서간의 데이터 교환은 매우 빈번하게 발생 할테니까요..

< 주의!! >
get, post를 이용하는 것은 다른 문서로 값을 전달 하는 것이고
setvar는 현재 문서의 변수 값을 설정 하는 것입니다. 엄연히 틀린 것이죠..

2. <prev> 태스크

여덟번째 예제에서 잠시 나왔었던 <prev>.. 뒤로 버튼과 같다는 것을 이미 아시고 계실텐데요.
이 prev를 이용해 전 카드로 돌아가는 동작시에도 변수를 설정 할수 있습니다.

<do type="prev"><prev/></do> 보통 이렇게 이용을 하였었는데요..
변수 값을 지정하는 예를 한번 보면...

<do type="prev><prev><setvar name="pass" value="" /></prev></do>

이렇게 됩니다. 이 문장은 보통 로그인 페이지로 되돌아갈때
사용자가 비밀번호를 다시 입력하도록 비밀번호 칸을 빈칸으로 할 경우 이용 되곤 합니다. 쉽죠?

3. <refresh> 태스크

<go>나 <prev>를 공부해오셨던 여러분들은 이제 이 태스크는 무슨일을 하는 것인지
대충 봐도 감이 오실겁니다..^^

<refresh>는 현재의 카드를 새로 읽는 태스크입니다.
만약 <refresh>~</refresh> 사이에 <setvar>와 같은 변수 설정 부분이 있다면
그 구문대로 변수의 값을 새로 적용하고 현재의 카드를 다시 읽어 출력을 해주겠지요.

이용한 예를 봐볼까요?

<do type="accept" label="reset">
<refresh>
<setvar name="login" value="" />
<setvar name="pass" value="" />
</refresh>
</do>

이렇게 하면 카드에서 login과 pass라는 변수의 값을 빈칸으로 재설정한후
현재 카드를 다시 처음부터 화면에 뿌려주게 됩니다.

 


관련글 더보기