2016-06-18 2 views
4
  • У меня есть две простые формы (Form1 и Form2). Они имеют только одно поле каждый (поле1). Я создал два пользовательских элемента управления. Они идентичны, за исключением cc1 имеет источник данных определяется как Form1 и cc2 имеет источник данных формы 2.
  • Каждый пользовательский элемент управления имеет один InputBox связанный с FIELD1 полем соответствующего источника данных, и одна кнопка отправки. Я создаю страницу
    Xpage и вытаскиваю оба пользовательских элемента управления на страницу.
  • Если я просматриваю и заполняю поля ввода на странице Xpage в браузере , когда я нажимаю на любую из кнопок отправки, два документа будут созданы на основе двух форм в базе данных домино.
  • Я попытался использовать частичное обновление/выполнение и многое другое. Независимо от того, что я делаю, я всегда получаю пустые документы обеих форм.

XPage:Xстраница с несколькими формами и источниками данных создает пустые документы

<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

Обычная кнопка отправки получает свойство 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> 
+0

Это отлично. Спасибо, Кнут. Это почти идеально. Однако после нажатия кнопки «Отправить» поле ввода не обновляется. Кроме того, если я введу другое значение в поле ввода и снова нажмите кнопку отправки, тогда предыдущий документ будет перезаписан вместо создания нового документа с новым значением. –

+1

Этот http://stackoverflow.com/a/14585187/2065611 может помочь вам получить новый документ после сохранения предыдущего. –

+1

Да, действительно. это был ответ! Но мне пришлось добавить дополнительную строку в код: ds.setFormName ("form2"); –

2

Вот код, который работает, используя предложение Кнута:

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> 

cc1

<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> 

cc2

<xp:panel id="formDiv2" styleClass="col-sm-4 "> 
    <xp:this.data> 
     <xp:dominoDocument var="form2" formName="form2"></xp:dominoDocument> 
    </xp:this.data> 
    <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:executeScript> 
       <xp:this.script><![CDATA[#{javascript: 
var panel = getComponent("formDiv2"); 
var ds = new com.ibm.xsp.model.domino.DominoDocumentData(); 
ds.setComponent(panel); 
ds.setVar("form2"); 
ds.setFormName("form2"); 
panel.getData().clear(); 
panel.addData(ds);}]]></xp:this.script> 
      </xp:executeScript> 
      </xp:actionGroup> 
     </xp:this.action> 
     </xp:eventHandler> 
    </xp:button> 
    </xp:panel> 
01 Предложение
2

Пола засыхают о использовании сферы 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> 
Смежные вопросы