X 2.0 上 Mosaic 的填充(fill_out) Form 支持
|
|
这里是我们已经实现的Mosaic
for X 2.0上的填充 form 的详细内容.
FORM 标记
FORM 标记用来指明一个 HTML 文档中的填充式form。在一个文档中可以出现多个填充式form,但是form不可以嵌套.
<FORM ACTION="url"> ... </FORM>
允许的属性有:
- ACTION 是将接收 form 递交请求的查询服务器的 URL; 如果忽略这个属性,
则使用当前文档的 URL.
- METHOD 是 HTTP/1.0 使用的用于向查询服务器递交请求的方式. 使用哪种方式取决于你的服务器是如何工作的;
我们强烈建议使用 (至少近期如此) POST 方式. 有效的选择包括:
- GET -- 这是缺省方式,填充form的内容将被附在 URL 的后面,就好象它是一个普通的查询请求
- POST -- 这种方式把 form 的内容用一个数据块方式发送给服务器,而不是作为
URL 的一部分.
- ENCTYPE 说明填充 form 的内容使用的编码方式. 该属性只有当 METHOD
设为 POST 方式时才有效-- 而且即便如此,目前也只有一种可选值,也就是缺省值
application/x-www-form-urlencoded.
注: 如果在 NCSA HTTPd 中你要使用 POST 方式,你必须使用
1.0a5 或更新的版本.
在一个 FORM 内部,除了另一个 FORM,你可以使用任何其他标记.
特别要说明的是, INPUT, SELECT, 和 TEXTAREA 标记用于说明在
form 中的接口元素.
Form 在显示外观上不会被自动地区别于文本的其他部分. 我们建议在 form 的开始和结束处使用
HR (水平线) 标记以把它和周围的文本和其他 form 区别开.
INPUT 标记
INPUT 标记用来说明 FROM 中的一个简单的输入元素. 它是一个独立的标记;
不需要括起任何内容,也没有结束标记 -- 它的用法和 IMG 相同.
在 X 上的 Mosaic 中, 各种类型的 INPUT 标记被示例为
Motif widgets(文本输入域, 切换按钮, push按钮,等).
INPUT 中的属性有:
- TYPE ,其值必须是下面中的一个:
- "text" (文本输入域; 缺省值)
- "password" (文本输入域; 输入的字符被以星号代替)
- "checkbox" (单个切换按钮; 打开on或关闭off)
- "radio" (单个切换按钮; 打开on或关闭off;
使用同一 NAME 的其他切换按钮共同组成“多中选一”的组)
- "submit" (一个按钮,用来把当前的 form
打包,放到一个查询 URL 中发送给远地服务器
- “reset" (一个按钮,用来把 form 中的各种输入元素复位到它们的缺省值)
- NAME 是输入域的象征性的名字(而不是一个显示用的名字 -- 象form
中普通的 HTML 使用的那样. 除了"submit"和"reset"以外,所有的输入类型都要有这样一个名字,
因为在递交填充 form 时,它被用来把得到的信息组合成查询串发送给远地服务器.
- VALUE, 对于一个 text 或 password 输入项, 它被用于指明该域的缺省内容.
对于一个 checkbox 或 radio 按钮, VALUE 指明一个按钮被选定时的值(未被选中的
checkboxes 在递交的查询串中被忽略); checkbox 或 radio 按钮的缺省值为 "on".
对于 "submit" 和 "reset" 类型, VALUE 可以用来说明显示在按钮上的标签内容.
- CHECKED (不需要值) 指明该 checkbox 或 radio 按钮被缺省选中;
只适用于 checkboxe 和 radio 按钮.
- SIZE 是输入域的大小(字符数); 只适用于 text 输入域和 password
输入域. 如果忽略该属性, 则采用缺省值20. 多行的 text 输入域可以用 SIZE=宽,高
来指明; 如 SIZE=60,12. 注: SIZE 属性不应该用来说明多行的
text 输入域,因为有专门的 TEXTAREA 标记可用.
- MAXLENGTH 说明最多允许输入多少字符; 只适用于 text 输入域和
password 输入域(同样应只用于单行的文本输入域). 如果忽略该属性, 缺省值是没有限制的.
如果 MAXLENTH 比 SIZE 大,则文本输入域会自动滚动.
SELECT 标记
在 <FORM> ... </FORM> 之间, 允许使用任意数量的
SELECT 标记, 它们可以随便和其他 HTML 元素(包括 INPUT
和 TEXTAREA 元素) 和文本(但不含其他的form)混合使用. 在
X 的 Mosaic 中, SELECT 标记被示例为Motif 参数菜单和滚动列表。
不同于 INPUT 的是, SELECT 既有开始标记又有结束标记.
在 SELECT 包含的区域内只允许出现一系列 OPTION 标记,每个标记后跟随意数量的纯文本(不要跟
HTML 标记文本); 例如:
<SELECT NAME="a-menu">
<OPTION> First option.
<OPTION> Second option.
</SELECT>
SELECT 中的属性有:
- NAME 是该 SELECT 元素的象征名. 该属性不可省略,
因为递交 form 时要用它合成查询串.
- SIZE: 如果 SIZE 是 1 或者被省略, 缺省情况下 SELECT
将被表示为一个 Motif 选项菜单. 如果 SIZE 是 2 或者更大的数, SELECT
将被表示为一个 Motif 滚动列表; SIZE 的值这时用来说明列表中同时可以看见多少选项.
- MULTIPLE:如果包含了该属性(没有值), 它用来说明该 SELECT
将允许选择多个选项. MULTIPLE 属性将强制将 SELECT 显示成
Motif 滚动列表, 不管 SIZE 的值是多少.
OPTION 的属性为:
- SELECTED 说明该参数被缺省选中. 如果 SELECT 允许多选项(通过使用
MULTIPLE 属性), 则多个 option 可以被指定为 SELECTED.
TEXTAREA 标记
TEXTAREA 标记可以用于在 form 中放置一个多行的文本输入域,同时这个输入域中可以带缺省内容.
它可以使用的属性有:
- NAME 是该文本输入域的象征名.
- ROWS 是文本输入域的行数(垂直方向的字符数).
- COLS 是文本输入域的列数(水平方向的字符数).
TEXTAREA 输入域自动含有滚动条; 可以在其中输入任意数量的文本.
TEXTAREA 元素需要开始标记和结束标记. 一个不含缺省内容的
TEXTAREA 如下:
<TEXTAREA NAME="foo" ROWS=4 COLS=40></TEXTAREA>
含有缺省内容的 TEXTAREA 如下:
<TEXTAREA NAME="foo" ROWS=4 COLS=40>
Default contents go here.
</TEXTAREA>
缺省内容必须是纯 ASCII 文本. 换行是有效的(因此上面的例子中在 "Default
contents go here."的前面和后面都有一行).
Form 的递交
对于 Method = GET 的方式
当用户按下 submit 按钮时, form 中的内容将被合成到一个类似下文的 URL
查询串中:
action?name=value&name=value&name=value
("action" 在这里是 FORM 标记的ACTION属性指明的 URL,
或者当前文档的 URL 如果没有指定ACTION 属性的话)
"name" 或 "value" 中出现的特殊字符将被转义; 这包括
"=" 和 "&". 注: 分隔name和value的"="和分隔各个
name/value 对的"&" 是不转义的.
对于 text 和 password 输入域, 用于输入的任何内容都作为value; 如果用户什么也没有输入,
value为空,但是查询串中的"name="部分仍然存在.
对于checkboxe 和radio 按钮, 当它被选中时 VALUE 属性用于指明
checkbox 或 radio 按钮的值. 未选中的 checkbox 在合成查询串时被完全忽略.
如果需要的话多个 checkboxe 可以使用同一个 NAME(但是不同的VALUE).
实现"多中选一"的一组 radio 按钮应该使用同一个 NAME 和不同的
VALUE.
对于 Method = POST 的方式
form 中的内容和上面介绍的 GET 方式的编码完全一样, 但是这时不是把它附加到
form 的 ACTION 属性指定的 URL 后面作为查询串, 而是把form的内容看成是 POST
操作的一部分放到数据块中发送. ACTION 属性(如果有的话)是数据块要发送的目的
URL.
测试服务器
如果你想写一个 form 原型并且到一个查询服务器上显示一下你递交的内容(解码的
name/value 对), 你可以使用下面的地址:
- METHOD="POST"时, 用 ACTION="http://hoohoo.ncsa.uiuc.edu/cgi-bin/post-query"
- METHOD="GET" 时, 用 ACTION="http://hoohoo.ncsa.uiuc.edu/cgi-bin/query"
查询和发布查询的 C 语言源程序包含在 NCSA HTTPd 软件包中的cgi-src目录下.
下面列出的form的例子使用了这些查询服务器作为返回, 因此你可以看到它们的反应从而估计到你自己的
form 的情况.
重要说明: 如果你在 form 中使用 GET 方式, 你将发现如果一次递交太多的数据(多于几百个字节)时处理
GET 方式的服务器将被阻塞 -- 服务器在通过 shell 命令行向处理 form
的模块传送数据, 而 shell 命令行限制的最大长度被超过了. 这个问题在 POST
方式和其服务器中是不存在的.
需要注意的事情
- HTML+ 中说明的有些内容目前尚不被支持. 特别是还不能用 action 支持mailto
URL 的功能, 而且 Mosaic 2.0 只支持允许的输入类型的一个子集(当然 "text"
也可以用作 "url", "int", "float", 和 "date"
来使用, 不过这样就没有范围/错误检查了).
- "submit" 元素对所有其他的form 来说都是不可缺少的, 除了只含有单独一个TEXT类型的INPUT元素的form(这时文本输入域中的回车将发送form)或者至少含有一个IMAGE类型的INPUT元素(这种情况下用点击该图像来递交form).
- Mosaic有一个秘密特性: 如果 form 中有一个单独的文本输入域且其 NAME
为"isindex", 则递交的查询串和你用 ISINDEX 得到的一样
-- "url?querystring"(注意, 不是"url?isindex=querystring").
这使你可以在你的文档中使用简单的form指向已经存在的查询服务器(包括 Gopher
和 WAIS 服务器!). 这当然假设这种form中没有使用 POST 方式.
- IRIX 5.1.0.1 和 5.1.1 (至少这两个版本)中似乎有缺陷, 使得 form 中的文本输入域在物理上只有应该显示的一半大.
在 Mosaic 中不存在这个问题-- 在我们看到的所有其他的 X 服务器上, 输入域的大小都是正确的,
这个常见的几何上的问题在其他的运行于 IRIX 5.1.0.1/5.1.1 下的程序中也存在(如
Marc 的 Epoch 窗口变得只有一半大, 等). 在 SGI 修改他们的 X 服务器中的这一缺陷之前,
我们对此无能为力.
ISINDEX 的处理
到此为止, 我们已经有了精致的 form 支持, 我们采用另一种方法支持 ISINDEX
标记. 不同于用一个浏览器接口方法(对话框或文本输入域)来输入一个查询, ISINDEX
是作为适合于输入一个查询的预先装入的form来实现的; 这个 form 嵌在文档中
ISINDEX 标记本身出现的位置.
更改说明:
- Mosaic 内部查询机制的一致化.
- 允许降低代码和接口的复杂性.
- 在预发布的 prerelease 2 中有几个令人不快的问题出现在"弹出式文本输入域"中;
notably, lots of unavoidable flashing when field popped up and down and
intermittent but crippling Motif geometry management problem. 这些问题在修改以后的版本中被更正了.
- 每个用户都希望只有文档确实是ISINDEX文档时才有输入一个可以提交的查询的功能;
改动后的版本很好地实现了这一点.
- 该版本解决了何时保留搜索区域中存在的问题 -- 因为现在搜索区域存在于一个预文档的基础上.
- 鼓励通过向已经存在的检索服务器提交form的方式来实践填充form.
举例
这里有十二个例子. 所有的例子现在都是用 METHOD=POST 方式.
书写你自己的填充Form查询引擎
如果你想根据你为数据库访问或其他目的生成的填充 form 设置一个或多个查询引擎的话,
可以看一看NCSA
HTTPd 1.0. 在 NCSA HTTPd 软件包中有一个例程是一个简单的填充form服务器(实际上和上面的例子使用的服务器一样),
这是你编写你自己的服务器时可以使用的一个不错的模板.
我们再次强烈建议在form中使用POST方式. 一个理由是:
在 GET 方式中, 就算很多服务器(如NCSA HTTPd) 能够从 URL 中把查询串传递给查询服务器的描述程序,
你的form中的内容还是极有可能被严格的命令行参数长度的限制所截短. 而在 POST
方式中(如NCSA HTTPd),你可以完全解决这个问题.
Real World(TM)中的填充Form
这里是Real World(tm)中使用的form的例子. 关于更新的例子, 请察看What's
New页.
评论?
请按该地址发电子邮件:mosaic-x@ncsa.uiuc.edu.
Copyright: NPACT |
|