如何在Xforms中从另一个控件中填充另一个控件?

时间:2011-06-23 13:30:30

标签: xforms

我目前正在使用XForms开发一个存档系统,并且是初学者。我有两种形式,它们有一个公共字段,需要填充相同的值,即第二种形式的字段的值取决于在第一种形式中输入的值。我希望这个条目能够自动完成,当我填写第一个表单时,我不必再以第二个表单输入该值。由于我保存到MySQL数据库,我需要两个字段来填充数据库中的相应表。你会怎么做?

2 个答案:

答案 0 :(得分:0)

您可以使用the setvalue actionxforms-value-changed事件:

<xf:input bind="foo">
    <xf:label>First control:</xf:label>
    <xf:setvalue ev:event="xforms-value-changed" bind="bar" value="context()" />
</xf:input>

<xf:input bind="bar">
    <xf:label>Second control:</xf:label>
    <xf:setvalue ev:event="xforms-value-changed" bind="foo" value="context()" />
</xf:input>

或者,您可以在the calculate attribute上使用the bind element

<xf:bind nodeset="instance('bar')/slave" calculate="instance('foo')/master" />

请注意,第二种方法可能会使绑定到节点的控件成为只读,这可能不是您的意图。

编辑:看起来我完全误解了你的问题。抱歉,抱歉。

答案 1 :(得分:0)

通常,您有两个选项来创建这样的工作流:使用FormBuilder / FormRunner(但由于我不使用它们,我无法帮助您),或者“使用{{3}手动”和...例如XML pipelines与SQL数据库进行交互。

如果您所谈论的两种形式都是相同的xforms:model,您可以使用Phil描述的技术连接它们。

如果不是,则需要在导航到表单2之前使表单1的xforms:instance数据保持不变。通常,xforms:submission用于将数据发送到持久层。您必须创建以下元素:

  • 表单1的xforms:model中的xforms:submission元素,将实例数据发送到某个xpl管道(称为xpl 1);
  • xpl 1将数据写入sql数据库:至少需要一个sql处理器组件来构建和发送所需的sql命令。如果需要预处理实例数据,可以添加xslt处理器。
  • xpl 2从sql数据库中读取:与xpl 1相同,只是另一种方式。将读取操作(xpl 2)从写入分割到sql db(xpl 1)具有更高的灵活性,使表单2更加独立于表单1。
  • 表单2中的
  • ,您可以使用xpl 2初始化实例。SQL processor

使用这些组件,您可以创建非常灵活的工作流程。