表单未提交给正确的服务器scgript

时间:2015-02-02 14:38:44

标签: xforms exist-db xsltforms

我正在尝试使用echo服务测试这个XForm的提交(我有自己的echo Xquery脚本,但也尝试使用基于Web的代码示例)。我的检查显示xforms-submit-done事件确实被触发但是提交资源属性中的脚本没有被调用。相反,我得到一个空白页面,网址保持不变。

代码如下。

<html xmlns:ev="http://www.w3.org/2001/xml-events" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:html="http://www.w3.org/1999/xhtml" xmlns:xf="http://www.w3.org/2002/xforms" xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <title>Movie Review Selector</title>
        <model xmlns="http://www.w3.org/2002/xforms">
            <instance id="movies">
                <movies xmlns="">
                    <movie id=""></movie>
                </movies>
            </instance>
            <submission id="save" resource="http://xformstest.org/cgi-bin/echo.sh" method="post" replace="all">
                <xf:message ev:event="xforms-submit-error" level="modal">Submission Error<xf:output value="event('error-type')"></xf:output>
                </xf:message>
            </submission>
        </model>
    </head>
    <body>
        <fieldset>
            <legend>
                <h3>Movie Selector</h3>
            </legend>
            <group xmlns="http://www.w3.org/2002/xforms" ref="instance('movies')">
                <repeat nodeset="movie" id="idx">
                    <input ref="@id">
                        <label>Movie Id</label>
                    </input>
                    <trigger>
                        <label>Delete</label>
                        <delete nodeset="." ev:event="DOMActivate"></delete>
                    </trigger>
                </repeat>
                <trigger>
                    <label>Add</label>
                    <action ev:event="DOMActivate">
                        <insert nodeset="movie"></insert>
                        <setvalue ref="movie[last()]/@id" value=""></setvalue>
                    </action>
                </trigger>
                <submit submission="save">
                    <label>Submit</label>
                </submit>
            </group>
        </fieldset>
    </body>
</html>

1 个答案:

答案 0 :(得分:1)

由于浏览器存在局限性,因此无法在XSLTForms中使用POST方法和replace="all"

相反,您必须使用method="xml-urlencoded-post",这是一个仅适用于XSLTForms的hack。您不会在服务器中获得纯XML主体,但它将位于名为postdata

的表单字段中

请查看此主题以获得更深入的解释:http://sourceforge.net/p/xsltforms/mailman/message/24455248/

XQuery脚本应使用request:get-parameterxmldb:decode来获取文档。像这样:

let $p := request:get-parameter( "postdata", "" );
let $doc := xmldb:decode( $p );
return $doc