Xpages не может заставить getComponent работать в Ext: Dialog

У меня есть выборка значений в диалоговом окне. Пользователь выбирает значение, и это значение вводится в поле редактирования, которое привязано к переменной области видимости. Все идет нормально.

Затем у меня есть кнопка, где я хочу запросить доступ к значению, которое находится в поле редактирования.

Я попытался использовать

var satLoc:String = viewScope.get("selLoc");
var satLoc:String = getComponent("selLoc").getValue();

ни одна из них не работает - я просто получаю null.

Мой код ниже. Я был бы признателен за помощь.

<!--?xml version="1.0" encoding="UTF-8"?-->
<xp:view xmlns:xp="http://www.ibm.com/xsp/core" xmlns:xe="http://www.ibm.com/xsp/coreex">

 <xp:button id="button15" value="Load Satellite Dialog"> 
 <xp:eventhandler event="onclick" submit="true" refreshmode="partial" refreshid="dialogAddSat">
 
 </xp:eventhandler>
 </xp:button>

 

 <xe:dialog id="dialogAddSat">
 
 <xe:dialogbuttonbar>
 <xp:table id="tblCrd">
 <xp:tr>
 <xp:td>
 <xp:label id="label24" for="region" value="Hub Location Number">
 </xp:label></xp:td>
 <xp:td> 
 <xe:djtextbox id="djTextBox2">
 <xe:this.dojoattributes>
 <xp:dojoattribute name="readOnly" value="true">
 </xp:dojoattribute>
 </xe:this.dojoattributes>
 <xp:eventhandler event="onChange" submit="true" refreshmode="partial" refreshid="tblCrd">
 </xp:eventhandler>
 </xe:djtextbox>
 </xp:td>
 <xp:td>

 <xp:button id="button13" value="Attach Satellite">
 <xp:eventhandler event="onclick" submit="true" refreshmode="complete" id="eventHandler7" disablevalidators="true">
 
 <xp:this.action>
 <xp:actiongroup>
 <xp:confirm>
 
 </xp:confirm>
 <xp:executescript>
 
 </xp:executescript>
 </xp:actiongroup>
 </xp:this.action>
 </xp:eventhandler>
 </xp:button></xp:td>
 </xp:tr>
 <xp:tr>
 <xp:td>
 <xp:label id="label25" for="region" value="Select Location...">
 </xp:label></xp:td><xp:td>
 
 <xe:*********** id="*************" dialogtitle="Choose A Location To Add As A Satellite" pickericon="/picker.png" for="selLoc">

 <xe:this.dataprovider>
 <xe:simple***********>
 
 </xe:simple***********>
 </xe:this.dataprovider>
 </xe:***********></xp:td>
 <xp:td>

 <xp:button value="Cancel" id="button10">
 <xp:eventhandler event="onclick" submit="true" refreshmode="complete" id="eventHandler4">
 
 </xp:eventhandler>
 </xp:button></xp:td>
 </xp:tr>
 <xp:tr>
 <xp:td>
 </xp:td>
 <xp:td>
 </xp:td>
 <xp:td>
 </xp:td>
 </xp:tr>
 </xp:table>
 </xe:dialogbuttonbar>
 </xe:dialog>
</xp:view>

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

1 ответ

Проблема заключается в сроках. В следующем коде вы вычисляете текст подтверждения. Но это вычисляется на стороне сервера, когда оно отображается. Во время рендеринга переменная viewScope пуста.

<xp:button id="button13" value="Attach Satellite">
 <xp:eventhandler event="onclick" submit="true" refreshmode="complete" id="eventHandler7" disablevalidators="true">
 
 <xp:this.action>
 <xp:actiongroup>
 <xp:confirm>
 <xp:this.message><!--[CDATA[#{javascript:try {
var satLoc:String = viewScope.get("selLoc");
//var satLoc:String = getComponent("selLoc").getValue();
var hubLoc = "0002";
//var hubLoc:String = document1.getDocument().getItemValueString("locNum");
return "Make Location " + satLoc + " a Satellite for Location Number " + hubLoc
} catch(e){
return e;
}}]]-->
 </xp:this.message>
 </xp:confirm>
 <xp:executescript>
 
 </xp:executescript>
 </xp:actiongroup>
 </xp:this.action>
 </xp:eventhandler>
</xp:button>

Если вы обновите компонент кнопки при изменении входного значения, он отобразит правильное значение. Тем не менее, я бы предпочел вычислить значение подтверждения на стороне клиента, в атрибуте script. Закрытие диалогового окна должно быть окончательным действием (если пользователь не подтверждает значение, его не следует закрывать. Вот модифицированная версия.

<xp:button id="button13" value="Attach Satellite">
 <xp:eventhandler event="onclick" submit="true" refreshmode="complete" id="eventHandler7" oncomplete="XSP.closeDialog('#{id:dialogAddSat}');" disablevalidators="true">
 <xp:this.action>
 <xp:actiongroup>
 <xp:executescript>
 
 </xp:executescript>
 </xp:actiongroup>
 </xp:this.action>
 
 </xp:eventhandler>
</xp:button>

licensed under cc by-sa 3.0 with attribution.