非常不错的WAP常见问题问答大全(二)第2/3页

 更新时间:2007年03月14日 00:00:00   作者:  

12. 什么是一个“deck”?
    一个WML文档有许多卡片(cards)组成。一个卡片是一系列完整的WML代码。这些卡片被称为一个“deck”。卡片和“deck”的概念就有点像HTML中的锚标记<a name="#achor1">和一个HTML页面。也就是说卡片是“deck”中的一个组成部分。也可以把“deck”称为WML中的页面。它们之间的关系可以比做一副扑克牌。整副扑克牌就是deck,而每一张牌就是card。
13. 什么是WML的“deck”?
    WML的“deck”或者WML文件是指decks。每个deck包含一个或者更多的card。每个deck都以<wml>开始和结束。并且每个card都以<card>开头或者结束。
    当WML微型浏览器处理WML文件或者deck的时候,它阅读整个deck,并且在deck内的各个card之间进行导航。当装入deck的时候,deck里面所有的card都已经装入到内存中,直到浏览器装入另外的deck。
    如果熟悉 HTML中的<a name>标签。WML的<card>标签将是非常类似的:
<wml>

<card id="start_menu">
...some code...
</card>

<card id="purchase">
...some more code...
</card>

</wml>
    deck和card可以按照这种方式调用:[deckname][#cardname]。如果deckname省略,那么浏览器就会查找当前内存里的cardname名字的card。如果使用了deckname和#cardname,那么浏览器将装入deckname的整个deck,然后跳入到#cardname。这个和HTML的工作方式很像。
14. WML是大小写敏感的吗?
    是的!要注意WAP 1.1使用小写的标签。
15. 如何显示一个美元符号?
    使用两个在一起的美元符号来表示,即“$$”。
16. 想显示价格的格式该怎么办?
    “$”是一个特殊的字符,使用“$$”来显示一个“$”。
    例如:
<p>
    The price is $$11.20
</p>
17. fieldset标签有什么作用?
    编写WML页面的时候要考虑到设备的屏幕很小。如果试图想把一个大的form在一个屏幕里面显示,就要指定那些标签保持在一个屏幕中。那么fieldset标签将这些标签捆绑在一个屏幕上。
18. postfield标签有什么作用?
    postfield标签使允许提交参数到服务器端。注意有些早期的模拟器还不支持该标签,这将给开发工作带来麻烦!
19. WML有类似HTML的<mailto>标签吗?
    没有。但是你可以使用WML表单和服务端脚本来得到同样的效果。
20. 无法让<input/>格式正常工作是怎么回事?
    至少Nokia WML Reference没有讲清楚有关<input/>标签的用法。format参数控制着用户输入数据的类型和长度。
    注意到不是所有的WAP 1.1浏览器都接受所有的格式化代码。例如:Nokia 7110就支持得不是很好。Mitsubishi Trium在处理“*f”代码的时候有点问题,“*”必须为1或者更大。专门的格式化代码如下:

从A到Z的任何大写字母,没有数字或其他字符。 

从a到z的任何小写字母,没有数字和其他字符。 

任何0到9的数字。 

从A到Z从0到9的任何字符。 

从a到z从0到9的任何字符。 

任何字符,输入默认从大写开始。 

任何字符,输入默认从小写开始。 
*f 
(星号)意味着任何数字(包括0),f是格式的代码。 
nf 
意味着恰好要输入的字符个数。n从1到9。f是格式代码。 

是转义输出字符。 
    格式化字符可以组合使用来表示一种特定的格式输入。但是强制一定的输入应当避免在用户出错的时候没有提示信息。如果输入是不正确的,该填写的区域一般仍保持空白,直到让用户知道应该输入什么。如果只想输入数字,使用“*N”那么将直接转跳到数字输入模式。如果只想输入大写的字符,使用“*M”转跳到大写输入模式。现举一些例子:
    “N” 只接受一个数字字符。
    “*N” 接受任何数字字符。
    “NN” 只接受2个数字字符,不多不少。
    “ANN” 接受一个大写字符(没有数字),后面跟着两个数字,不多不少。
    “X*N” 表示可以接受一个字符(没有数字)后面跟着任意多的数字字符。
    “NNN\-NNN\-NNNN”表示接受美国的电话号码格式,例如:“123-456-1234”。
    “2N\:2N\:2N” 表示接受时间格式,例如:“12:02:34”。
    “NNNNNNNNN” 表示接受9个数字字符。
    “9N” 同样表示接受9个数字字符。 
    maxlength参数控制着输入字符的总个数。
21. 如何防止一个空的field?
    在大多数情况下需要知道用户确实是输入了一些内容在field中,不能让这些内容为空。这个可以通过在服务端的检测来完成,也可以通过WML来完成。
    在WML中,这个检查可以通过合适的格式化代码来完成,或者使用一个在input标签中叫做emptyok="false" 的参数来实现(只有当必须要求用户输入的时候才使用)。如果使用了value="something" 或者value="" 用户仍然可以发送空的fields。
    以下的行将接收任何值到username field, 甚至用户将整个field清空。另外field中没有任何东西,也能够提交form。
        <input name="username" type="text" value="things" format="*M"/> 
    除了用户将整个field清空,以下的行将接收任何值到username field。如果field是空的,他将不能提交form,。
        <input name="username" type="text" value="things" format="M*m"/>
    以上的应用是针对大多数的浏览器。在Nokia 7110 ,emptyok参数可以有同样的效果:
        <input name="username" type="text" value="things" format="*M" emptyok="false"/>
22. 使用option标签的时候,无法一屏显示完该怎么办?
    许多WAP电话的显示屏幕只能显示三到四个选项。按以下的方法分割option字段就可以输入更多的选项。
<select title="longselectlist">
<optgroup title="option1">
<option>option1-1</option>
<option>option1-2</option>
<option>option1-3</option>
</optgroup>
<optgroup title="option2">
    <option>option2-1</option>
      <option>option2-2</option>
      <option>option2-3</option>
</optgroup>
<optgroup title="option3">
      <option>option3-1</option>
      <option>option3-2</option>
      <option>option3-3</option>
</optgroup>
</select>
23. 想有一个永久的BACK在屏幕的右下方。有些好像是自动的,若没有,该怎么做?
    可以加入以下代码。
<do type="prev" label="Back">
    </prev>
</do>
    更好的是使用template。
……
<template>
    <do type="prev" label="Back" name="back">
        </prev>
    </do>
</template>
……
24. WAP支持列表吗?
    是的,WAP1.1支持列表和相关的标记。
25. 可以在WML中使用表单吗?
    可以。但是Nokia 7110在显示表单的时候有些问题。
26. WML支持什么样的表单提交方式?
    WML支持GET和POST方式。但是Nokia 7110在处理GET方式的时候有些问题。
27. WML中如何增加参数到URL字符串中?
    和HTML的工作方式很像,如下所示:
……
www.someserver.com/someurl?parameter1=value1&parameter2=value2
……
    唯一的不同是将“&”变成“&”。
28. 如何从WML向ASP传送数据?
    假设有一个ASP叫做“myasp.asp”,并且有一个WML变量叫做 “wmlvar”。当发出请求“myasp.asp?wmlvar=something”,可以使用下面的方法得到变量的内容。
    dim aspvar
    aspvar = Request.QueryString("wmlvar") 
    ASP变量“aspvar”将包含字符串“something”。当然ASP变量也可以与WML变量同名。
29. 如何让WML页面自己更新?
    有过Web经验的人喜欢使用:
        <meta http-equiv="refresh" content="1;http://somewhere.com/"> 
    来强制浏览器自动更新。
    虽然在WAP中也支持一些META标签,一个更好的办法是使用<ontimer>标签。
    以下的代码显示了如何自动转跳到另外一个卡片:nextdeck.wml。
<?xml version="1.0"?>
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml">
<wml>
    <card id="splashscreen" ontimer="nextcard.wml">
      <timer value="40"/>
      <p>Please wait for the timer to run out...</p>
    </card>
</wml>
    下面的代码将强制浏览器在一段时间后重新装入同一个卡片。这个页面叫做loop.wml。
<?xml version="1.0"?>
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml">
<wml>
    <card id="loop" ontimer="loop.wml">
      <timer value="40"/>
      <p>This text will be shown over and over again...</p>
    </card>
</wml>
    注意必须避免浏览器可能要使用的cache机制。

相关文章

最新评论