2015-02-02 6 views
0

Я пытаюсь протестировать представление этого XForm с помощью службы эха (у меня есть собственный скрипт эхо XQuery, но я также попробовал его на веб-основе, который вы можете увидеть в примере кода). Мои проверки показывают, что событие xforms-submit-done завершается, но сценарий в атрибуте ресурса представления не активируется. Скорее, я получаю пустую страницу внутри, и URL остается неизменным.Форма, не отправленная на правильный сервер scgript

Код приведен ниже.

<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

Duw ограничений в браузерах, это не представляется возможным использовать метод POST и replace="all" в XSLTForms.

Вместо этого вы должны использовать method="xml-urlencoded-post", это взломать, который работает только для XSLTForms. Вы не получите чистое тело XML на сервере, но это будет в поле формы под названием postdata

Посмотрите на эту тему для более глубокого объяснения: http://sourceforge.net/p/xsltforms/mailman/message/24455248/

Сценарий XQuery должен использовать request:get-parameter и xmldb:decode, чтобы получить документ. Что-то вроде этого:

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

спасибо. Теперь он проходит через мой сценарий echo, но eXists запрашивает: get-data(), который должен публиковать данные в экземпляре, не возвращает ничего, поэтому я получаю пустой элемент postdata. Можете ли вы пролить свет на это, прежде чем я приму ответ? –

+0

Я добавил пример кода для эхо-скрипта XQuery. НТН –