XForms/提交
我们一直小心地将所有数据存储在模型中,原因之一是,一旦完成,就可以很容易地将模型序列化为 XML,并将其发送到文件、Web 服务或可能是数据库。
所有这些都是通过使用简单的submit
命令完成的。submit 实际上只是一个触发器,其 submission 属性指向模型中的提交元素。这通常是一个按钮,上面写着“提交”或“保存”,出现在表单的末尾。
在许多 HTML 表单中,您填写表单并按下表单底部的“保存”或“提交”按钮。您按下按钮,希望您的数据被保存。概念是相同的。但是,在这种情况下,submit 命令可以通过多种方式触发,不仅仅是按钮被按下,并且有一些明确的方法可以从接收方获取提交过程成功的反馈。
submit 事件的行为与触发器完全相同,但有一个关键的例外,即xforms-submit
事件也会被派发。
模型可以有多个提交,由id标识
<xforms:submission id="s001" method="post" action="action.php"/>
<xforms:submission id="s002" method="post" action="action2.php" replace="instance"/>
<xforms:submission id="s003" method="put" action="file:///tmp/final.xml"/>
第一次提交将数据发送到指定的 action,而第二次提交将期望获得一个返回的 xml 来更新当前文档/实例。第三次提交将保存文件到指定位置的本地/tmp/final.xml
界面非常简单。它只是一个简单的“保存”按钮,由名为 submit 的触发器创建。
<html
xmlns="http://www.w3.org/1999/xhtml"
xmlns:xf="http://www.w3.org/2002/xforms"
xmlns:ev="http://www.w3.org/2001/xml-events">
<head>
<title>XForms Submit Example</title>
<xf:model>
<xf:instance xmlns="">
<MyData>
<Data1>One</Data1>
<Data2>Two</Data2>
<Data3>Three</Data3>
</MyData>
</xf:instance>
<xf:submission id="save" method="put" action="myData.xml" ref="/MyData"/>
</xf:model>
</head>
<body>
<xf:submit submission="save">
<xf:label>Save</xf:label>
</xf:submit>
</body>
</html>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:xf="http://www.w3.org/2002/xforms"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/20021/XMLSchema-instance">
<head>
<title>Submission with get and put</title>
<xf:model>
<xf:instance id="data_instance" src="data.xml" xmlns=""></xf:instance>
<xf:submission id="read-from-file" method="get" action="data.xml" replace="instance"
instance="data-instance"></xf:submission>
<xf:submission id="save-to-file" method="put" action="data.xml" replace="instance"
instance="data_instance"></xf:submission>
</xf:model>
</head>
<body>
<p>Demonstration of using XForms to get and put data to local file using the submission
element.</p>
<xf:input ref="Element1">
<xf:label>Element1:</xf:label>
</xf:input>
<br />
<xf:input ref="Element2">
<xf:label>Element2:</xf:label>
</xf:input>
<br />
<xf:input ref="Element3">
<xf:label>Element3:</xf:label>
<br />
</xf:input>
<xf:submit submission="read-from-file">
<xf:label>Reload</xf:label>
</xf:submit>
<xf:submit submission="save-to-file">
<xf:label>Save</xf:label>
</xf:submit>
</body>
</html>
保存按钮实际上只是一个名为“submit”的触发器,有一个名为 submission 的属性。
<xf:submit submission="save">
属性submission="save"
指向模型中提交元素的 ID。
<xf:submission id="save" method="put" action="myData.xml" ref="/MyData"/>
请注意,由于我们使用的是“相对文件名”(相对于表单所在的目录),因此它将把数据保存在表单所在的同一个目录位置。
您也可以使用绝对路径名,但您必须小心如何描述磁盘驱动器,因为没有标准。
以下格式适用于使用 FireFox 浏览器的 Microsoft Windows 系统
<xf:submission id="save" method="put" action="file:/C:/tmp/myData.xml" ref="/MyData"/>
注意:本节由不了解 Web 服务器管理的人员编写。自行阅读,并确保安全专业人员审核对公共 Web 服务器的任何更改。
本教程中的大多数示例都与学习 XForms 有关,而不是与 Web 服务器管理有关。也就是说,我们认为有一些东西可能对您有用。
默认情况下,Web 服务器通常没有配置为写入您的 Web 服务器。尤其是由未经授权的用户。如果是这样的话,黑客可能会使用您的 Web 服务器来存储他们的成人内容。
为了使 XForms 能够使用“put”保存实例,您应该只允许授权用户写入。为此,您需要能够正确地管理您的 Web 服务器。
如果您有一台仅内部用户(通常称为 Intranet)可以访问的计算机,您可以将以下内容添加到您的 Apache 配置文件(通常称为 httpd.config 并且位于 /usr/local/etc 或类似位置)。
首先,可能需要加载以下模块。
mod_dav, mod_dav_fs, mod_dav_svn, mod_authz_svn.
这可以通过在您的 httpd.conf 文件中添加以下行来完成。
LoadModule dav_module libexec/apache22/mod_dav.so LoadModule dav_fs_module libexec/apache22/mod_dav_fs.so
<Directory "usr/local/www/apache22/data/forms/read-write-test"> DAV on AllowOverride None Order allow,deny Allow from all </Directory>
通过打开 DAV,您将启用所有 WebDAV 操作,包括“PUT”。
待完成...