2014-11-14 2 views
1

У меня есть inputText, который является обязательным для моего документа.xpages 2 частичных обновления из обязательного поля

<xp:inputText value="#{Cdoc.txt_NumeCompanie}" id="txt_NumeCompanie" 
         required="true" defaultValue="#{javascript:param.value}"> 
     <xp:this.validators> 
       <xp:validateRequired message="Numele companiei este obligatoriu." loaded="true"> 
       </xp:validateRequired> 
     </xp:this.validators> 
     <xp:eventHandler event="onchange" submit="false" disableValidators="true"> 
      <xp:this.script><![CDATA[ XSP.partialRefreshPost("#{id:scrollDiv}", { 
         onComplete: function() { 
          XSP.partialRefreshPost("#{id:pers}"); 
         } 
        }); 
       ]]></xp:this.script> 
     </xp:eventHandler> 
</xp:inputText> 

Я также проверил Process data without validation (из вкладки сервера ...). Но обновления не происходит.

ответ

4

Вы не указали требуемый второй параметр на своем втором partialRefreshPost. Попробуйте это:

XSP.partialRefreshPost("#{id:scrollDiv}", { 
    onComplete: function() { 
     XSP.partialRefreshPost("#{id:pers}", {}); 
    } 
}); 

Update: вы можете использовать OnComplete событие EventHandler для запуска 2-го частичного обновления. Таким образом, использовать традиционное частичное обновление первого компонента, а затем запустить 2--й частичное обновление через OnComplete события:

<xp:inputText value="#{Cdoc.txt_NumeCompanie}" id="txt_NumeCompanie" required="true" defaultValue="#{javascript:param.value}"> 
    <xp:this.validators> 
      <xp:validateRequired message="Numele companiei este obligatoriu." loaded="true"> 
      </xp:validateRequired> 
    </xp:this.validators> 
    <xp:eventHandler event="onchange" submit="true" refreshMode="partial" refreshId="scrollDiv"> 
     <xp:this.onComplete><![CDATA[XSP.partialRefreshPost("#{id:pers}", {});]]></xp:this.onComplete> 
    </xp:eventHandler> 
</xp:inputText> 
+0

не работает –

+0

Попробуйте использовать только один partialRefreshPost и посмотрите, работает ли это. –

+0

Нет, я попытался это: <хр: EventHandler событие = "OnChange" представить = "истинный" \t \t RefreshMode = "NoRefresh" disableValidators = "истинный"> \t \t <хр: this.script> \t

0

Хорошо, первое, что нужно сделать, это открыть панель инструментов и посмотреть на сетевой трафик. Это поможет вам понять, что происходит. Вы можете использовать FireBug в FireFox или инструментах разработчика в Google Chrome.

Что происходит с сетевым трафиком для вышеуказанного фрагмента?

Edit:

Все еще ждут, чтобы услышать, что сетевой трафик генерируется ...

Но просто глядя на свой код ... - попробуйте установить представить = "истинный". Я посмотрел на некоторые из кода, который у меня есть, и я не уверен, что требуется дополнительный пустой параметр :-)

Не могли бы вы объяснить, что вы пытаетесь получить?

Редактировать

Хорошо, я понимаю, что вы хотите. У меня был быстрый просмотр в некотором коде. Я не делаю то же самое, что и вы. Однако, когда я гнезжусь частичным тонизирует я обычно делаю это таким образом:

<xp:button id="button1" 
    styleClass="btn btn-danger btn-lg#{FishingTripEdit.typeInput eq '1' ? ' inActive' : ''}"> 
    <xp:eventHandler event="onclick" submit="true" refreshMode="partial" 
     refreshId="inputTypeSelected" disableValidators="true"> 
     <xp:this.action> 
      <xp:executeScript> 
       <xp:this.script><![CDATA[#{javascript:MyBean.setData('0')}]]></xp:this.script> 
      </xp:executeScript> 
     </xp:this.action> 
     <xp:this.onComplete><![CDATA[XSP.partialRefreshGet("#{id:buttonTopHolder}")]]></xp:this.onComplete> 
     <xp:this.script><![CDATA[return document.getElementById("#{id:triggerAsk}").value!=='1' ? true : confirm("Sure?")]]></xp:this.script> 
    </xp:eventHandler> 
</xp:button> 

Так что для «первого» обновить Я использую встроенную разметку - и OnComplete я добавляю второе как обычный JavaScript. Я знаю, что это пример с partialRefreshGet (который я предпочитаю использовать, если это вообще возможно из-за меньших накладных расходов). Но, возможно, это может дать вам идею ....

+0

Если я установил submit = "true", он сделает полное обновление на сервере. Я не хочу полного обновления на странице, всего 2 частичных обновления для 2 панелей. В зависимости от вышеописанного значения inputText, я пытаюсь скрыть/показать некоторые элементы, расположенные на 2 панелях. –

+0

Попробуйте использовать только один partialRefreshPost и посмотрите, работает ли это/генерирует запрос ajax. –

+0

submit = "true" не выполняет полного обновления страницы, refreshMode = "полный" элемент управления, который. submit = "true" означает "отправить содержимое на сервер после запуска CSJS". Без submit = "true", eventHandler не выполняет никакого обновления, частичного или иного. Он просто запускает CSJS. –

3

Устанавливая представить = «ложь», вы предотвращение каких-либо обработки на сторону сервера от того запускается сам eventHandler. Это означает, что disableValidators = «true» не имеет значения, поскольку жизненный цикл XPages не обрабатывается из eventHandler.

Вместо этого обновление создается из клиентского кода XSP.partialRefreshPost. У этого нет возможности отключить проверку, как описано здесь How to disable validators using the XSP.partialRefreshPost method?. disableValidators = "true" не влияет и не влияет на обработку partialRefreshPost. Вероятно, ваша проверка еще продолжается. Чтобы подтвердить это, добавьте панель ошибок в начальную область обновления.

partialRefreshGet может работать, я не уверен.

Мой обычный подход в этих сценариях заключается в обновлении отдельной области, содержащей обе области, которые вы хотите обновить. Затем установите submit = "true" и disableValidators = "true". Но имейте в виду, что даже если проверка неактивна, преобразование данных по-прежнему проверяется, поэтому, если вы вводите текстовое значение в поле чисел, частичное обновление все равно будет работать.

+0

Я действительно не могу использовать одну область (панель), которая содержит 2 области (панели), поэтому я должен обновить две панели, не содержащие одну. Я пробовал с partialRefreshGet, но он не работает. –

+0

partialRefreshGet только тянет с сервера, он не публикует. Таким образом, сервер не знает о каких-либо изменениях, внесенных пользователем на веб-странице. Может работать стандартное частичное обновление с partialRefreshGet в onComplete. Если вы хотите просто использовать CSJS, вам нужно определить, как выполнить partialRefreshPost без запуска проверки. * IF * валидация запускает и приводит к сбою, но я не могу сказать, что это происходит. –

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