Вопрос О Диалогах

roddm

New member
04.11.2011
4
0
#1
По нажатию кнопки выполняется CSJS, в котором при некоторых условиях необходимо открыть диалог.
После этого (независимо от открытия или НЕ открытия диалога) необходимо выполнить SSJS.
Однако XSP.openDialog() не желает открывать диалог.
Подскажите, plz, в чем может быть проблема (Кнопка 1 примера).

Примерчик:

Код:
<?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 value="Кнопка 1" id="button1">
<xp:eventHandler event="onclick" submit="true"
refreshMode="complete">
<xp:this.action><![CDATA[#{java script:if (viewScope.ReestrAnswer == "")
{
// Выполняем дальнейшие действия ...
viewScope.ReestrAnswer = "777"
}
}]]></xp:this.action>
<xp:this.script><![CDATA[var rez = XSP.getElementById("#{id:ReestrAnswer}").value

if (rez == "" || rez == "777")
{
XSP.openDialog("#{id:dialog1}");
}	]]></xp:this.script>
</xp:eventHandler>
</xp:button>

<xp:button value="Кнопка 2" id="button3">
<xp:eventHandler event="onclick" submit="false">
<xp:this.script><![CDATA[var rez = XSP.getElementById("#{id:ReestrAnswer}").value

if (rez == "" || rez == "777")
{
XSP.openDialog("#{id:dialog1}");
}	]]></xp:this.script>
</xp:eventHandler>
</xp:button> <xp:inputText id="ReestrAnswer" value="#{viewScope.ReestrAnswer}"></xp:inputText>
<xp:br></xp:br>
<xe:dialog id="dialog1" title="Ввод данных">
<xe:dialogContent id="dialogContent1">
<xp:table>
<xp:tr>
<xp:td><xp:label value="Поле 1:" id="label3" style="color:rgb(0,0,128)">
</xp:label></xp:td>
<xp:td>
<xp:inputText id="inputText1"></xp:inputText></xp:td>

</xp:tr>
<xp:tr>
<xp:td><xp:label value="Поле 2:" id="label1" style="color:rgb(0,0,128)">
</xp:label></xp:td>
<xp:td>
<xp:inputText id="inputText2"></xp:inputText></xp:td>

</xp:tr>
<xp:tr>
<xp:td></xp:td>
<xp:td><xp:button id="button2" value="Сохранить">
<xp:eventHandler event="onclick" submit="true"
refreshMode="complete" id="eventHandler3">
<xp:this.action><![CDATA[#{java script:viewScope.ReestrAnswer = "1"
getComponent('dialog1').hide()}]]></xp:this.action>
</xp:eventHandler>
</xp:button> <xp:button value="Отменить" id="button4">
<xp:eventHandler event="onclick" submit="true"
refreshMode="complete">
<xp:this.action><![CDATA[#{java script:viewScope.ReestrAnswer = "0"
getComponent('dialog1').hide()}]]></xp:this.action>
</xp:eventHandler></xp:button></xp:td>

</xp:tr>
</xp:table></xe:dialogContent></xe:dialog>
</xp:view>
 

NickProstoNick

Статус как статус :)
Lotus team
22.08.2008
1 802
21
#2
хм... а дизайнер не "говорит" об ошибках?
1. не совсем ясно что такое "java script"
2. в кнопке не работает потому что совмещаешь SSJS и CSJS. Для того чтоб открылся диалог - на стороне SSJS не должно быть сабмита и рефреша.
Вызывать диалог можно по событию кнопки onStart или onComplete. Возникают когда уже состоялось нажатие на кнопку.
onStart - возникает перед рефрешем
onComplete - после рефреша

Так же можно разнести код между страницей и диалогом.
Так же можно передать кнопке в диалоге определенный код.
Главное хорошо подумать
 

hosm

* so what *
18.05.2009
2 442
6
#3
>"java script"
замечала, что так наш форум преобразует этот слово в хтмл - думаю, можно забить
 

roddm

New member
04.11.2011
4
0
#4
хм... а дизайнер не "говорит" об ошибках?
Дизайнер говорит - все Ок.
2. в кнопке не работает потому что совмещаешь SSJS и CSJS. Для того чтоб открылся диалог - на стороне SSJS не должно быть сабмита и рефреша.
Нельзя совмещать SSJS и CSJS ?
В следующем примере по нажатию кнопки сначала выполняется CSJS, а затем SSJS. И рефреш срабатывает чтобы открылся диалог из под SSJS.
Непонятно чем мешает рефреш на стороне SSJS открытию диалога из CSJS ?
Код:
<xp:button value="Кнопка 3" id="button5">
<xp:eventHandler event="onclick" submit="true" refreshMode="complete">
<xp:this.script><![CDATA[alert("CSJS")]]></xp:this.script>
<xp:this.action><![CDATA[#{java script:facesContext.getViewRoot().postScript('alert("SSJS!")')
getComponent('dialog1').show()}]]></xp:this.action>
</xp:eventHandler>
</xp:button>
Так же можно разнести код между страницей и диалогом.
Так же можно передать кнопке в диалоге определенный код.
Код должен быть на странице, т.к. диалог открывается не всегда, а при некоторых условиях.
 

NickProstoNick

Статус как статус :)
Lotus team
22.08.2008
1 802
21
#5
В первом примере у тебя диалог открывается CSJS
Во втором примере - SSJS.
Разницу замечаешь?

Строй правильно логику кода.
Основной код зависит от значений диалога?
 

roddm

New member
04.11.2011
4
0
#6
В первом примере у тебя диалог открывается CSJS
Во втором примере - SSJS.
Разницу замечаешь?
Разницу понимаю. Я имел в виду что после CSJS вполне может отрабытывать SSJS.
Просто непонятно чем SSJS с рефрешем может мешать вызову диалога из CSJS ?
Ведь сначала отрабатывает CSJS c вызовом диалога, и только после этого SSJS с рефрешем. И кстати все работает.
Кроме вызова XSP.openDialog("#{id:dialog1}") из CSJS. Такое впечатление что Domino просто не хочет выполнять эту команду и пропускает ее.
Основной код зависит от значений диалога?
В основном коде ПРИ некоторых условиях может вызываться диалог (для ввода дополнительных данных) и обрабатываться его результаты (в основном коде - если диалог был открыт). Открывать диалог ДО вызова основного кода - бессмысленно.
 

NickProstoNick

Статус как статус :)
Lotus team
22.08.2008
1 802
21
#7
потому что XSP.openDialog() и XSP.closeDialog() требуют частичного обновления! Конфликтуют они с обновлением, которое вызывается серверным событием!!!

И правильно я понимаю? Планируется такой порядок выполнения кода одной кнопки:
CSJS кнопки вызывает диалог
SSJS выполняет часть кода и ждет данных диалога.
Диалог закрывается и SSJS продолжает работать?

Сделаете - расскажите как!

Добавлено: То как планируется сделать - работать не будет.
По извращаться конечно можно. Но зачем?
Правильно построй логику и все.
Можно обойтись только SSJS. На кнопку "Ок" диалога можно навесить код, который продолжит код основной кнопки.
Причем этот код модно навесить прямо из основной кнопки. Только ни в коем случае не надо делать циклов с пред/пост условием.