2014-06-10 3 views
0

Я попытался выбрать2 плагин на XPAGES. Он работает правильно для нового документа, но для существующего документа его нельзя сохранить. И я нашел источник этой проблемы «XPages не будет сохранить существующий документ при использовании $ .ajax» и XAgent

Вот мой простой пример (test.xsp): `

<xp:view xmlns:xp="http://www.ibm.com/xsp/core" 
xmlns:xc="http://www.ibm.com/xsp/custom" 
xmlns:xp_1="http://www.ibm.com/xsp/coreex"> 
<xp:this.data> 
    <xp:dominoDocument var="document1" formName="Employee" 
     action="openDocument" computeWithForm="both"> 
    </xp:dominoDocument> 
</xp:this.data> 
<xc:coreHeader theme="blue"></xc:coreHeader> 
<xp:button value="Save" id="button1"> 
    <xp:eventHandler event="onclick" submit="true" refreshMode="complete"> 
    <xp:this.action> 
     <![CDATA[#{javascript:currentDocument.save();context.redirectToPage("grid.xsp");}]]> 
    </xp:this.action> 
    </xp:eventHandler> 
</xp:button> 
<xp:button id="button2" rendered="#{javascript:!currentDocument.isEditable()}" value="Edit"> 
    <xp:eventHandler event="onclick" submit="true" refreshMode="complete"> 
     <xp:this.action> 
     <xp:changeDocumentMode mode="toggle" var="document1"></xp:changeDocumentMode> 
     </xp:this.action> 
    </xp:eventHandler> 
</xp:button> 

<xp:label for="forteInputText" styleClass="control-label" value="Label"></xp:label> 
<xp:div styleClass="controls" >   
    <xp:inputText id="txtNama" value="#{document1.Nama}"></xp:inputText> 
    <xp:inputText id="txtAlamat" value="#{document1.Alamat}"></xp:inputText> 
</xp:div> 
<xp:scriptBlock rendered="true"> 
    <xp:this.value><![CDATA[// DECLARATION 
     dojo.ready(function(){ 
      $.ajax({ 
       url:'example.xsp' 
      }).done(function(data){ 
       x$('#{id:txtNama}').val(data); 
      }) 
    })]]></xp:this.value> 
</xp:scriptBlock> 
<xc:coreFooter></xc:coreFooter> 
</xp:view> 

и XAgent (пример .xsp)

<?xml version="1.0" encoding="UTF-8"?> 
<xp:view xmlns:xp="http://www.ibm.com/xsp/core" rendered="false"> 
    <xp:this.afterRenderResponse><![CDATA[#{javascript: 
    try{ 
     var externalContext = facesContext.getExternalContext(); 
     var writer = facesContext.getResponseWriter(); 
     var result = "ajax testing"; 
     writer.write(result); 
     writer.endDocument(); 
    } catch(e){ 
     _dump(e); 
    } 
}]]></xp:this.afterRenderResponse> 
</xp:view> 

Когда я открываю url "server/database.nsf/test.xsp". TxtNama получит значение: «ajax testing» из example.xsp, и я его сохранил .. этот новый документ можно сохранить без каких-либо проблем.

Однако, когда я открываю этот сохраненный документ url = "server/database.nsf/test.xsp? DocumentId = XXXXXXXXXXXXXX". и заполните значение txtAlamat и сохраните его. Любые изменения в txtAlamat не могут быть сохранены.

Но если я установил xp: scriptBlock rendered = "false" и попытаюсь снова заполнить значение txtAlamat, то изменения txtAlamat будут сохранены.

Это очень странно ..

+0

Я не понимаю, что вы пытаетесь сделать: я не вижу вашего использования select2, я не понимаю, почему вы хотите назвать свою функцию ajax, и я не вижу этого примера .xsp пытается ничего сохранить. Вот демонстрационная версия Select2 with XPages, которая может быть полезна: http://bootstrap4xpages.com/bs4xp/demos.nsf/select2.xsp –

+0

Извините, что вы запутались .. Я пытаюсь использовать select2 плагин. но XPAGES может сохранять только документ только для нового документа. И я пытаюсь сжать код, чтобы найти причину этой проблемы. И я обнаружил, что в моей базе данных я не могу сохранить какие-либо изменения для существующего документа, пока я использую $ .ajax –

ответ

0

Две вещи:

  • Проверить, если вы на самом деле можете редактировать документ и сохраните изменения. Возможно, у вас недостаточно доступа для его обновления.

  • Я проверил ваш сценарий: открыл test.xsp, создал документ, открыл test.xsp? DocumentId = xxx, внес изменения в поле и успешно обновил документ. Обратите внимание, что если вы снова откроете test.xsp? DocumentId = xxx, появится обновленное значение. Но если вы нажмете кнопку «Редактировать», XPage будет переведен в режим редактирования, а значение ввода будет изменено на «ajax testing», потому что вызов ajax снова начнется. Возможно, вы захотите изменить код, чтобы выполнять только вызов ajax для новых документов. Если вы хотите, чтобы ваши изменения были сохранены, просмотрите документ с помощью клиента Notes.

+0

спасибо за ваш ответ. У меня есть доступ менеджера для ACL этой базы данных. Я тоже пробовал этот сценарий .. но он все еще могут быть сохранены только для нового документа. Для существующего документа любые изменения могут быть сохранены, если я отключу визуализацию scriptBlock (отключить вызов $ .ajax). И я до сих пор не знаю, в чем причина этой странной проблемы. Не могли бы вы отправить мне свой тестовый сценарий nsf на мою почту? отправьте его на адрес [email protected], чтобы я мог сравнить, что не так в моем коде. –

+0

Попробуйте это: создайте документ с помощью test.xsp, откройте этот документ, используя test.xsp? Id = xxx, нажмите «Изменить» (поле изменится на «ajax testing»), обновите поле и нажмите «Сохранить». Теперь проверьте документ в базе данных с помощью клиента Notes. Вы увидите, что он изменился. Проблема с вашим кодом заключается в том, что вызов Ajax «сбрасывает» поле каждый раз, когда вы открываете документ. –

+0

эта форма есть 2 поле: Nama и Alamat. И я установил $ .ajax для заполнения «Nama» с помощью «ajax testing» из example.xsp. Я установил поле «Alamat» в качестве свободного текста, и когда я пытаюсь отредактировать «Alamat» в существующем документе, он не сохранил.Кроме того, я добавляю «print (« save успешно ») в postSave, и этот скрипт запускается только при сохранении нового документа не для существующего документа. –

Смежные вопросы