0

我创建了这两个简单的文件 view.xhtml:

<html xmlns="http://www.w3.org/1999/xhtml"
  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:fr="http://orbeon.org/oxf/xml/form-runner"
  xmlns:ev="http://www.w3.org/2001/xml-events"
  xmlns:xxf="http://orbeon.org/oxf/xml/xforms">
<head>
    <title>Test</title>
    <xf:model>

        <!-- Instance that contains all the books -->
        <xf:instance id="people-instance">
            <people xmlns="">
                <person>
                 <test/>
                </person>
            </people>
        </xf:instance>
    <xf:bind id="test-bind" name="test" ref="person/test"/>
    </xf:model>

</head>
<body>
<xf:input id="test-control" bind="test-bind">
    <xf:label>THIS</xf:label>
</xf:input>
<fr:my-name test="'test'">
</fr:my-name>       
</body>

和 my-name.xbl :

<xbl:xbl 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:ev="http://www.w3.org/2001/xml-events"
     xmlns:xxf="http://orbeon.org/oxf/xml/xforms"
     xmlns:fr="http://orbeon.org/oxf/xml/form-runner"
     xmlns:xbl="http://www.w3.org/ns/xbl"
     xmlns:xxbl="http://orbeon.org/oxf/xml/xbl"
     xmlns:fb="http://orbeon.org/oxf/xml/form-builder">

<xbl:binding element="fr|my-name" id="fr-my-name" xxbl:mode="lhha binding value">
    <metadata xmlns="http://orbeon.org/oxf/xml/form-builder" xmlns:xf="http://www.w3.org/2002/xforms">
    <templates>
          <view>
               <fr:my-name id="" appearance="minimal"   xmlns="" test="" >
               </fr:my-name>        
           </view>
     </templates>

     <xf:input ref="@test">
        <xf:label lang="en">Resource URI</xf:label>
      </xf:input>

    </metadata> 

    <xbl:template>
        <!-- Local model and instance -->
    <xf:var name="test-avt" xbl:attr="xbl:text=test" xxbl:scope="outer"/>
        <xf:var name="test" xbl:attr="xbl:text=test" >
        <xf:action ev:event="xforms-enabled xforms-value-changed">
            <xf:setvalue ref="instance('test')" value="$test"/>
        </xf:action>
      <xxf:sequence value="xxf:evaluate-avt($test-avt)" xxbl:scope="outer"/>
      </xf:var>
    <xf:model>
       <xf:instance id="test"><value/></xf:instance>
       <xf:instance><value/></xf:instance>
       <xf:submission id="save-submission" ref="instance('test')"   
                action="/exist/rest/db/orbeon/my-name/person.xml"
                method="put" replace="none">
                <xf:message ev:event="xforms-submit-error" level="modal">An error occurred while saving!</xf:message>
            </xf:submission>

     </xf:model>

    <xf:input class="xforms-disabled" ref="xxf:instance('people-instance')//*[name() = saxon:evaluate($test)]" >
        <xf:label>Your name</xf:label>
        <xf:send ev:event="xforms-value-changed" submission="save-submission"/> 
    </xf:input>

  </xbl:template>
</xbl:binding>

现在我想将参数从我的 view.xhtml 传递给 XBL,所以当用户在xf:input id='test-control'中插入一些东西时,它会导致文本将保存在数据库中。问题是,我的数据库中实际插入的用户不是:

<value>'test'</value>

如果我插入 123 而不是预期的 fe

<value>123</value>

任何人都知道为什么我的代码不起作用以及如何解决这个问题?

4

1 回答 1

0

这是一个有效的例子。我将两个文件放在一起,以便于尝试。

我改变了一些事情:

  • 如果您的test属性实际上是 AVT,则不应在其周围加上引号。因此,例如test="foo{42}"which 的计算结果为foo42,如果我理解得很好,它就是您要观察的 XML 元素的名称。
  • 您可能不希望saxon:evaluate($test):AVT 已经被评估并且结果在变量中可用$test。再次将结果评估为 XPath 表达式是没有意义的。
  • 第二个var不能有xbl:attr="xbl:text=test"
  • 可选:我使用xxf:binding-context('fr-my-name')/root()了 代替xxf:instance(),但xxf:instance()也可以使用(尽管不推荐使用它)。
  • 可选:我将 XBL 模型移到xbl:implementation. 更清楚的是,这不依赖于模板。
于 2014-12-17T18:59:45.017 回答