具有多个表单和数据源的Xpage创建空文档

时间:2016-06-18 01:08:38

标签: forms xpages lotus-domino

  • 我有两个简单的表单(Form1和Form2)。他们只有一个领域 每个(field1)。我创建了两个自定义控件。它们是相同的,除了 cc1的数据源定义为Form1,cc2的数据源定义为 表格2。
  • 每个自定义控件都有一个输入框绑定到field1字段 相应的数据源和一个提交按钮。我创造了一个 Xpage并将两个自定义控件拉入页面。
  • 如果我预览并填写X页面上的输入框 浏览器,当我点击任何提交按钮时,两个文件 将基于domino数据库中的两个表单创建。
  • 我尝试使用部分刷新/执行和许多其他东西。 无论我做什么,我总是得到两种表格的空文件。

的XPage:

<xp:div styleClass="container" style="margin-top:20px">
   <xp:div styleClass="row">
     <xc:cc1></xc:cc1>
     <xc:cc2></xc:cc2>
   </xp:div>
 </xp:div>

自定义控件1

 <xp:this.data>
    <xp:dominoDocument var="form1" formName="form1"></xp:dominoDocument>
  </xp:this.data>
  <xp:div id="formDiv1" styleClass="col-sm-4">
    <xp:form>
      <xp:label value="Form 1" styleClass="h3"></xp:label>
      <xp:div styleClass="form-group">
        <xp:label value="Field 1" styleClass="control-label"></xp:label>
        <xp:inputText value="#{form1.field1}"></xp:inputText>
      </xp:div>
      <xp:button value="Submit Form1" id="form1Btn">
        <xp:eventHandler event="onclick" submit="true" refreshMode="partial" immediate="false" save="true" refreshId="formDiv1"
          execMode="partial" execId="formDiv1">
        </xp:eventHandler>
      </xp:button>
    </xp:form>

自定义控件2

 <xp:this.data>
    <xp:dominoDocument var="form2" formName="form2"></xp:dominoDocument>
  </xp:this.data>
  <xp:div id="formDiv1" styleClass="col-sm-4">
    <xp:form>
      <xp:label value="Form 2" styleClass="h3"></xp:label>
      <xp:div styleClass="form-group">
        <xp:label value="Field 1" styleClass="control-label"></xp:label>
        <xp:inputText value="#{form2.field1}"></xp:inputText>
      </xp:div>
      <xp:button value="Submit Form2" id="form2Btn">
        <xp:eventHandler event="onclick" submit="true" refreshMode="partial" immediate="false" save="true" refreshId="formDiv1"
          execMode="partial" execId="formDiv1">
        </xp:eventHandler>
      </xp:button>
    </xp:form>

3 个答案:

答案 0 :(得分:3)

普通提交按钮获取属性save="true"并保存所有数据源。

如果您只想保存一个数据源,请使用简单操作Save Document并选择数据源:

enter image description here

另外设置属性save="false"。您的按钮代码如下所示:

<xp:button
    id="form1Btn"
    value="Submit Form1">
    <xp:eventHandler
        event="onclick"
        submit="true"
        refreshMode="complete"
        immediate="false"
        save="false">
        <xp:this.action>
            <xp:saveDocument
                var="form1"></xp:saveDocument>
        </xp:this.action>
    </xp:eventHandler>
</xp:button>

答案 1 :(得分:2)

以下是使用Knut建议的代码:

XPAGE

<table>
       <tr>
         <td>Photo</td>
        <td style="text-align: center"><img src="<?php echo base_url() ?>uploads/volunteer/<?php echo $file_name; ?>" height="100" width="150"></td>
                                </tr>
</table>

CC1

<xp:div styleClass="container" style="margin-top:20px">
    <xp:div styleClass="row">
      <xc:cc1></xc:cc1>
      <xc:cc2></xc:cc2>
    </xp:div>
  </xp:div>

CC2

<xp:panel id="formDiv1" styleClass="col-sm-4">
    <xp:this.data>
      <xp:dominoDocument var="form1" formName="form1"></xp:dominoDocument>
    </xp:this.data>
    <xp:label value="Form 1" styleClass="h3"></xp:label>
    <xp:div styleClass="form-group">
      <xp:label value="Field 1" styleClass="control-label"></xp:label>
      <xp:inputText id="field1" value="#{form1.field1}"></xp:inputText>
    </xp:div>
    <xp:button value="Save" id="form1Btn">
      <xp:eventHandler event="onclick" submit="true" refreshMode="partial" immediate="false" save="false" execMode="partial"
        execId="formDiv1" refreshId="formDiv1">
        <xp:this.action>
          <xp:actionGroup>
            <xp:saveDocument var="form1"></xp:saveDocument>
            <xp:executeScript>
              <xp:this.script><![CDATA[#{javascript:
var panel = getComponent("formDiv1");
var ds = new com.ibm.xsp.model.domino.DominoDocumentData();
ds.setComponent(panel);
ds.setVar("form1");
ds.setFormName("form1");
panel.getData().clear();
panel.addData(ds);}]]></xp:this.script>
            </xp:executeScript>
          </xp:actionGroup>
        </xp:this.action>
      </xp:eventHandler>
    </xp:button>
  </xp:panel>

答案 2 :(得分:2)

Paul Wither关于在数据源中使用requestScope作用域的建议使得代码更加简单:

XPage

<xp:div styleClass="container" style="margin-top:20px">
    <xp:div styleClass="row">
      <xc:cc1></xc:cc1>
      <xc:cc2></xc:cc2>
    </xp:div>

自定义控件1

<xp:view xmlns:xp="http://www.ibm.com/xsp/core">
  <xp:this.data>
    <xp:dominoDocument var="form1" formName="form1" scope="request"></xp:dominoDocument>
  </xp:this.data>
  <xp:div id="formDiv1" styleClass="col-sm-4">
    <xp:label value="Form 1" styleClass="h3"></xp:label>
    <xp:div styleClass="form-group">
      <xp:label value="Field 1" styleClass="control-label"></xp:label>
      <xp:inputText id="field1" value="#{form1.field1}"></xp:inputText>
    </xp:div>
    <xp:button value="Save" id="form1Btn">
      <xp:eventHandler event="onclick" submit="true" refreshMode="partial" immediate="false" save="false" execMode="partial" execId="formDiv1"
        refreshId="formDiv1">
        <xp:this.action>
          <xp:actionGroup>
            <xp:saveDocument var="form1"></xp:saveDocument>
          </xp:actionGroup>
        </xp:this.action>
        <xp:this.onComplete><![CDATA[x$("#{id:field1}").val("");]]></xp:this.onComplete>
      </xp:eventHandler>
    </xp:button>
  </xp:div>
</xp:view>

自定义控件2

<xp:view xmlns:xp="http://www.ibm.com/xsp/core">
  <xp:this.data>
    <xp:dominoDocument var="form2" formName="form2" scope="request"></xp:dominoDocument>
  </xp:this.data>
  <xp:div id="formDiv2" styleClass="col-sm-4 ">
    <xp:label value="Form 2" styleClass="h3"></xp:label>
    <xp:div styleClass="form-group">
      <xp:label value="Field 1" styleClass="control-label"></xp:label>
      <xp:inputText id="field1" value="#{form2.field1}">
      </xp:inputText>
    </xp:div>
    <xp:button value="Submit Form2" id="form2Btn">
      <xp:eventHandler event="onclick" submit="true" refreshMode="partial" immediate="false" save="false" execMode="partial" 
      execId="formDiv2" refreshId="formDiv2">
        <xp:this.action>
          <xp:actionGroup>
            <xp:saveDocument var="form2"></xp:saveDocument>
          </xp:actionGroup>
        </xp:this.action>
        <xp:this.onComplete><![CDATA[x$("#{id:field1}").val("");]]></xp:this.onComplete>
      </xp:eventHandler>
    </xp:button>
  </xp:div>
</xp:view>