X 2.0 上 Mosaic 的填充(fill_out) Form 支持

BACKWARD


这里是我们已经实现的Mosaic for X 2.0上的填充 form 的详细内容.

FORM 标记

FORM 标记用来指明一个 HTML 文档中的填充式form。在一个文档中可以出现多个填充式form,但是form不可以嵌套.

<FORM ACTION="url"> ... </FORM>

允许的属性有:

注: 如果在 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 中的属性有:

SELECT 标记

<FORM> ... </FORM> 之间, 允许使用任意数量的 SELECT 标记, 它们可以随便和其他 HTML 元素(包括 INPUTTEXTAREA 元素) 和文本(但不含其他的form)混合使用. 在 X 的 Mosaic 中, SELECT 标记被示例为Motif 参数菜单和滚动列表。

不同于 INPUT 的是, SELECT 既有开始标记又有结束标记. 在 SELECT 包含的区域内只允许出现一系列 OPTION 标记,每个标记后跟随意数量的纯文本(不要跟 HTML 标记文本); 例如:

        <SELECT NAME="a-menu">
        <OPTION> First option.
        <OPTION> Second option.
        </SELECT>

SELECT 中的属性有:

OPTION 的属性为:

TEXTAREA 标记

TEXTAREA 标记可以用于在 form 中放置一个多行的文本输入域,同时这个输入域中可以带缺省内容. 它可以使用的属性有:

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 对), 你可以使用下面的地址:

查询和发布查询的 C 语言源程序包含在 NCSA HTTPd 软件包中的cgi-src目录下.

下面列出的form的例子使用了这些查询服务器作为返回, 因此你可以看到它们的反应从而估计到你自己的 form 的情况.

重要说明: 如果你在 form 中使用 GET 方式, 你将发现如果一次递交太多的数据(多于几百个字节)时处理 GET 方式的服务器将被阻塞 -- 服务器在通过 shell 命令行向处理 form 的模块传送数据, 而 shell 命令行限制的最大长度被超过了. 这个问题在 POST 方式和其服务器中是不存在的.

需要注意的事情

ISINDEX 的处理

到此为止, 我们已经有了精致的 form 支持, 我们采用另一种方法支持 ISINDEX 标记. 不同于用一个浏览器接口方法(对话框或文本输入域)来输入一个查询, ISINDEX 是作为适合于输入一个查询的预先装入的form来实现的; 这个 form 嵌在文档中 ISINDEX 标记本身出现的位置.

更改说明:

举例

这里有十二个例子. 所有的例子现在都是用 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 BACKWARD