Логин:   Пароль:






Новости
Рассылки
Форум
Поиск


Java
- Апплеты
- Вопрос-ответ
- Классы
- Примеры
- Руководства
- Статьи
- IDE
- Словарь терминов
- Скачать

Мобильная Java
- Игры
- Примеры
- Статьи
- WAP, WML и пр.

JavaScript
- Вопрос-ответ
- Примеры
- Статьи

Веб-мастеринг
- HTML
- CSS
- SSI

Разминка для ума
Проекты
Книги
Ссылки
Программы
Юмор :)




Rambler's Top100
Rambler's Top100

Мобильная Java: WAP, WML и прочееИспользование библиотек WMLScript

Использование библиотек WMLScript

Так или иначе, если разработчик хочет сделать что-то стоящее в WMLScript , ему прийдётся использовать библиотеки, встроенные в спецификацию WAP 1.1

В WAP 1.1 встроено шесть стандартных библиотек, таких как преобразование булевских, целых и обычных переменных (LANG); операции с плавающей точкой (FLOAT); операции со строками (STRING); манипуляции с абсолютными и относительными URL (URL); взаимодействие с WML броузером (WMLBrowser) и пара основных функций интерфейса пользователя (DIALOGS).

Далее надо уяснить несколько важных концепций на примере игры "magic square" , в которой игрок помещает целые числа в квадратную матрицу, следя за тем, чтобы сумма чисел в столбцах равнялась сумме в строках. Итак, создадим WML документ и назовём его magic.wml. Он будет содержать весь интерфейс пользователя и собственно логику игры. А так же создадим второй файл magic.wmls, в котором будут содержаться все вычисления.

Для начала мы должны описать взаимодействие между основными элементами пользовательского интерфейса и функциями WMLScript. ( ПОМНИТЕ: WML и библиотечные функции WMLScript  чувствителены к регистру ). Вызывая функцию скрипта из WML документа, Вы можете влиять на контекст документа прямо из функции посредством стандартных библиотек WML браузера. Давайте создадим дэку (card deck) , которая сперва будет спрашивать у игрока позицию и значение целого числа, которое будет помещено в массив, который будет представлять одну строку игрового поля, а затем будет вызывать функцию, для того, чтобы положить этот элемент в массив. Обратите внимание, что когда игрок нажмёт кнопку "OK", чтобы ввести значение, то наша дэка вызовет функцию FormRow , находящуюся в "./magic.wmls".

Посмотрите пример кода дэки,вызывающей функцию:

<?xml version="1.0"?>
<!DOCTYPE wml PUBLIC "-//PHONE.COM//DTD WML 1.1//EN"
	http://www.phone.com/dtd/wml11.dtd" &dt


<!--  WMLScript / Deck Interaction Example  -->

<wml>
 <card id="start">
	<do  type="accept" label="Start">
	 <go  href="#GetPosition">
	  <setvar name="col" value="" />
	  <setvar name="value" value="" />
	  <setvar name="row1" value="1,2,3,4,5" />
	  <setvar name="disrow1" value=">  0  0  0  0|  0" />
 	 </go>
	</do> 
	<p>
	Welcome to the data entry example. Press "start".
	</p>
 </card>

 <card id="GetPosition">
	<do  type="accept" label="OK">
		<go  href="#GetValue"/>
	</do>
	<p>
		Column (1 - 4):
		<input name="col" format="N"/>
	</p>
 </card>

 <card id="GetValue">
	<do  type="accept" label="OK">
		<go href="./magic.wmls#FormRow()" />
	</do>
	<p>
		Value (1 - 100):
		<input name="value" format="*N"/>
	</p>
 </card>
	
 <card id="DisplayResult">
	<do  type="accept" label="OK">
		<go  href="#GetPosition">
			<setvar name="row" value="" />
			<setvar name="col" value="" />
			<setvar name="value" value="" />
		</go>
	</do>
	<p>
		$disrow1 <br/>
	</p>
 </card>

</wml>

Теперь нам нужно создать собственно саму функцию. Файл magic.wmls должен находиться в той же директории, что и основной magic.wml. Объявляем в magic.wmls функцию FormRow типа external. Как раз из этой функции мы и будем взаимодействовать с WML дэкой посредствам библиотеки WMLBrouser. Библиотека позволяет нам получать и устанавливать значения переменных в WML документе прямо из функции. Полный список функций WMLBouser можно посмотреть здесь.

Следующий модуль объявляет внешнюю функцию, которая получает переменные из дэки (в нашем случае magic.wml), устанавливает переменную для дэки дисплея , указывая на отоброжаемую на дисплее дэку, и затем обновляет дисплей пользователя. Код модуля:


/*******************************************
  FormRow
  This function takes one new value/coordinate pair and
  inserts it in its proper line.
                   
********************************************/
                 
extern function FormRow () {

  var col = WMLBrowser.getVar ("col");
  var val = WMLBrowser.getVar ("value");
  var row1vals = WMLBrowser.getVar ("row1");
  var localdisrow;
  var localrowvals;



  WMLBrowser.setVar ("disrow1", "You entered col " + 
                     col + " and value " + val );

  WMLBrowser.go ( "magic.wml#DisplayResult" );
  WMLBrowser.refresh();

}

Обратитевнимание, что операторы в WML дэке - все в нижнемрегистре:


<setvar name="col" value />

Присваивать значение переменной через WMLBrouser нужно следующим образом:


WMLBrowser.setVar("col", "");

Теперь , когда мы увидели основные взаимодействия, давайте добавим к функции манипулирование с строками. Спецификация WMLScript включает библиотеку String которая, среди других особенностей, позволяет Вам обрабатывать переменную как одномерный массив строки. Всё, что Вам надо сделать - это обозначить текстовый разделитель, чтобы выводить строку на дисплей в форматированном виде. Более детальное опасание функций библиотеки String здесь.

В конечном счёте, нам нужно вставить значение, введённое игроком, в массив, и при том, чтобы в массиве это значение содержалой именно в той позиции, значение которой задал игрок.


/********************************************
  FormRow
  This function takes one new value/coordinate pair and
  inserts it in its proper line.
                   
********************************************/

                 
extern function FormRow () {

  var col = WMLBrowser.getVar ("col");
  var val = WMLBrowser.getVar ("value");
  var row1vals = WMLBrowser.getVar ("row1");
  var localdisrow;
  var localrowvals;

  row1vals = String.insertAt(row1vals, val, 0, ",");
  
  WMLBrowser.setVar ("disrow1", row1vals);
  WMLBrowser.setVar ("row1", row1vals);

  WMLBrowser.go ( "magic.wml#DisplayResult" );
  WMLBrowser.refresh();

}       
Этот фрагмент кода показывает - как мы будем вычислять индекс в массиве и помещать туда нужное значение. Пока мы пропустим преобразование в колонки, и просто будем вносить значения в массив элементов, начиная с нулевого значения. А вот преобразовывать будем в следующей статье, посвящённой библиотеке Lang.

Удачи.



Автор: Kevin Sharp

Warning: mysql_connect() [function.mysql-connect]: Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2) in /pub/home/javaport/javaportal/books/show2b.php on line 11

Warning: mysql_db_query() [function.mysql-db-query]: Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2) in /pub/home/javaport/javaportal/books/show2b.php on line 19

Warning: mysql_db_query() [function.mysql-db-query]: A link to the server could not be established in /pub/home/javaport/javaportal/books/show2b.php on line 19

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /pub/home/javaport/javaportal/books/show2b.php on line 30
Узнай о чем ты на самом деле сейчас думаешь тут.


[an error occurred while processing this directive]



Warning: mysql_connect() [function.mysql-connect]: Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2) in /pub/home/javaport/javaportal/news/worldnews.php on line 91

Warning: mysql_db_query() [function.mysql-db-query]: Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2) in /pub/home/javaport/javaportal/news/worldnews.php on line 93

Warning: mysql_db_query() [function.mysql-db-query]: A link to the server could not be established in /pub/home/javaport/javaportal/news/worldnews.php on line 93

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /pub/home/javaport/javaportal/news/worldnews.php on line 95