2014-09-05 3 views
1

У меня есть некоторые головные боли в последнее время с частичным освежением.xpages combobox значение установлено равным null после частичного обновления

выпадающего список пожары частичного обновления к панели (для визуализации поля из этой панели), на событии OnChange:

<xp:comboBox value="#{Contr.txt_tipcontractcv}" id="txt_tipcontractcv1"> 

     <xp:selectItems id="selectItems1"> 
         <xp:this.value><![CDATA[#{javascript:return ""}]]></xp:this.value> 
     /xp:selectItems> 
     <xp:selectItems id="selectItems2"> 
         <xp:this.value><![CDATA[#{javascript:@DbColumn(@DbName(),"SetupvwTipuriContracteC",1);}]]></xp:this.value> 
     </xp:selectItems> 
     <xp:eventHandler event="onchange" submit="true"> 
        <xp:this.script><![CDATA[XSP.partialRefreshGet("#{id:FisaP}", { 

    }); 
    ]]>    </xp:this.script> 
     </xp:eventHandler> 
</xp:comboBox> 

И код для панели & поля:

<xp:panel id="FisaP"> 
      <xp:label id="label4"> 
       <xp:this.value><![CDATA[#{javascript:"Fisa contract "+ Contr.getItemValueString("txt_tipcontractcv1")}]]></xp:this.value> 
       <xp:this.rendered><![CDATA[#{javascript: 
      Contr.getItemValueString("txt_tipcontractcv1") == "Vanzare-Cumparare" 
     }]]></xp:this.rendered> 

      </xp:label> 
     </xp:panel> 

Но, когда я выбираю значение, частичные обновления, похоже, запускаются, но сразу же значение combobox равно null - и общее обновление для xpage происходит, и поле с панели не отображается. Что мне не хватает?

+0

Это не имеет ничего общего с вашей проблемой/вопросом, но я настоятельно рекомендую использовать тег стиля как можно меньше. Вы должны сделать класс в стили CSS. Это не только намного лучшая веб-практика, но и упростит чтение XSP-разметки, так как там есть меньше общего кода. –

ответ

0

Ваше OnChange событие делает гораздо больше, чем вы предполагаете:

  1. XSP.partialRefreshGet() означает, что вы делаете частичное обновление в панели. Но поскольку это partialRefreshGet(), вы не передаете любые изменения, которые пользователь делает. Таким образом, сервер не знает ни одного изменений, внесенных пользователем.
  2. submit = "true" означает, что он полностью обновляет страницу после любого CSJS, в котором вы работаете. Так что удаление чего-либо пользователя , введенного в любом месте страницы.

Я думаю, что вы хотите submit = "false", чтобы просто запустить ваш CSJS.

Если вы хотите принять во внимание изменения в браузере непосредственно перед запуском onchange, не используйте partialRefreshGet. Вместо этого используйте:

<xp:eventHandler event="onchange" submit="true" refreshMode="partial" refreshId="FisaP" disableValidators="true"> 
     </xp:eventHandler> 

Преобразователи все еще работают, поэтому, если вы положили, например, текст в поле чисел, он все равно будет работать.

+0

Я добавляю submit = "false", но частичное обновление больше не работает. должен ли я также изменить XSP.partialRefreshGet()? –

+0

Что он отображает на вкладке «Сеть» Firefox (или соответствующие инструменты разработчика для вашего браузера)? Это также должно подтвердить, что submit = "true" вызвало полное обновление. –

+0

Мне нужно будет проверить. Странно, что эта техника работала очень хорошо - http://stackoverflow.com/questions/25619967/xpages-hiding-showing-fields-based-on-a-combobox-value/25623177#25623177 - и теперь это не " t работает больше. –

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