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”。
待完成...