2016-09-05 11 views
0

制御値が有効かどうかをチェックする方法があります(必要な場合は値が存在し、値が有効です)。私は(それが計算値をやり直すために別の、無関係なコントロールを変更する必要があるように見える期待されるように、私はxf:validxxf:validが、どれも仕事を使用してみましたが制御値が有効かどうかを確認するXPath

2016.2フォームビルダの例のフォームを - 。変更値に一度メール、有効な値が正しいです制御-5の

<xh:html xmlns:xh="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/2001/XMLSchema-instance" 
     xmlns:ev="http://www.w3.org/2001/xml-events" 
     xmlns:xi="http://www.w3.org/2001/XInclude" 
     xmlns:xxi="http://orbeon.org/oxf/xml/xinclude" 
     xmlns:xxf="http://orbeon.org/oxf/xml/xforms" 
     xmlns:exf="http://www.exforms.org/exf/1-0" 
     xmlns:fr="http://orbeon.org/oxf/xml/form-runner" 
     xmlns:saxon="http://saxon.sf.net/" 
     xmlns:sql="http://orbeon.org/oxf/xml/sql" 
     xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" 
     xmlns:fb="http://orbeon.org/oxf/xml/form-builder"> 
    <xh:head> 
     <xh:title>Untitled Form</xh:title> 
     <xf:model id="fr-form-model" xxf:expose-xpath-types="true"> 

      <!-- Main instance --> 
      <xf:instance id="fr-form-instance" xxf:exclude-result-prefixes="#all" xxf:index="id"> 
       <form> 
        <section-1> 
         <email-required/> 
         <email/> 
         <email-valid/> 
         <control-5/> 
        </section-1> 
       </form> 
      </xf:instance> 

      <!-- Bindings --> 
      <xf:bind id="fr-form-binds" ref="instance('fr-form-instance')"> 
       <xf:bind id="section-1-bind" name="section-1" ref="section-1"> 
        <xf:bind id="email-required-bind" name="email-required" ref="email-required" 
          xxf:whitespace="trim"/> 
        <xf:bind id="email-bind" ref="email" name="email" type="xf:email" xxf:whitespace="trim" 
          required="//email-required ne ''"/> 
        <xf:bind id="email-valid-bind" ref="email-valid" name="email-valid" 
          calculate="if (xxf:valid(//email)) then 'good' else 'bad'"/> 
        <xf:bind id="control-5-bind" ref="control-5" name="control-5" xxf:whitespace="trim"/> 
       </xf:bind> 
      </xf:bind> 

      <!-- Metadata --> 
      <xf:instance xxf:readonly="true" id="fr-form-metadata" xxf:exclude-result-prefixes="#all"> 
       <metadata> 
        <application-name>TEST</application-name> 
        <form-name>TEST</form-name> 
        <title xml:lang="en">Untitled Form</title> 
        <description xml:lang="en"/> 
       </metadata> 
      </xf:instance> 

      <!-- Attachments --> 
      <xf:instance id="fr-form-attachments" xxf:exclude-result-prefixes="#all"> 
       <attachments> 
        <css mediatype="text/css" filename="" size=""/> 
        <pdf mediatype="application/pdf" filename="" size=""/> 
       </attachments> 
      </xf:instance> 

      <!-- All form resources --> 
      <xf:instance xxf:readonly="true" id="fr-form-resources" xxf:exclude-result-prefixes="#all"> 
       <resources> 
        <resource xml:lang="en"> 
         <section-1> 
          <label>Untitled Section</label> 
         </section-1> 
         <email-required> 
          <label>Email Required?</label> 
          <hint/> 

         </email-required> 
         <email> 
          <label>Emal</label> 
          <hint/> 
         </email> 
         <email-valid> 
          <label>Email Valid</label> 
          <hint/> 
         </email-valid> 
         <control-5> 
          <label>Random Field</label> 
          <hint/> 
         </control-5> 
        </resource> 
       </resources> 
      </xf:instance> 

      <!-- Utility instances for services --> 
      <xf:instance id="fr-service-request-instance" xxf:exclude-result-prefixes="#all"> 
       <request/> 
      </xf:instance> 

      <xf:instance id="fr-service-response-instance" xxf:exclude-result-prefixes="#all"> 
       <response/> 
      </xf:instance> 

     </xf:model> 
    </xh:head> 
    <xh:body> 
     <fr:view> 
      <fr:body xmlns:xbl="http://www.w3.org/ns/xbl" xmlns:p="http://www.orbeon.com/oxf/pipeline" 
        xmlns:oxf="http://www.orbeon.com/oxf/processors"> 
       <fr:section id="section-1-control" bind="section-1-bind"> 
        <xf:label ref="$form-resources/section-1/label"/> 
        <fr:grid> 
         <xh:tr> 
          <xh:td> 
           <xf:input id="email-required-control" bind="email-required-bind"> 
            <xf:label ref="$form-resources/email-required/label"/> 
            <xf:hint ref="$form-resources/email-required/hint"/> 
            <xf:alert ref="$fr-resources/detail/labels/alert"/> 

           </xf:input> 
          </xh:td> 
          <xh:td> 
           <xf:input id="email-control" bind="email-bind"> 
            <xf:label ref="$form-resources/email/label"/> 
            <xf:hint ref="$form-resources/email/hint"/> 
            <xf:alert ref="$fr-resources/detail/labels/alert"/> 


           </xf:input> 
          </xh:td> 
         </xh:tr> 
         <xh:tr> 
          <xh:td> 
           <xf:output id="email-valid-control" bind="email-valid-bind"> 
            <xf:label ref="$form-resources/email-valid/label"/> 
            <xf:hint ref="$form-resources/email-valid/hint"/> 
            <xf:alert ref="$fr-resources/detail/labels/alert"/> 


           </xf:output> 
          </xh:td> 
          <xh:td> 
           <xf:input id="control-5-control" bind="control-5-bind"> 
            <xf:label ref="$form-resources/control-5/label"/> 
            <xf:hint ref="$form-resources/control-5/hint"/> 

            <xf:alert ref="$fr-resources/detail/labels/alert"/> 
           </xf:input> 
          </xh:td> 
         </xh:tr> 
        </fr:grid> 
       </fr:section> 
      </fr:body> 
     </fr:view> 
    </xh:body> 
</xh:html> 

答えて

0

これが起こる理由は、XFormsの中に処理モデルである:。。

  • まず、データが更新され、再計算され
  • 第二に、データは再検証されます。

したがって、検証に応じて計算を行うと、見ているサイクルの種類に陥ることがあります。つまり、予想される順番で起こることはありません。これはおそらくより微妙な依存アルゴリズム(これもこのRFEも参照)によって修正される可能性がありますが、現在これがどのように起こらなければならないかです。あなたがアクションを使用することができますこのような状況では

、のようなもの:

<xf:setvalue 
    observer="email-valid-control" 
    event="xforms-valid" 
    ref="bind('email-valid-bind')" 
    value="true()"/> 
<xf:setvalue 
    observer="email-valid-control" 
    event="xforms-invalid" 
    ref="bind('email-valid-bind')" 
    value="false()"/> 

これは重く、そしてcustom model logicを使用する必要がありますが、それは今のところ唯一の信頼できる方法です。

関連する問題