Решено Как вывести результаты работы метода (об ошибке)

Amfion

Well-Known Member
26.05.2010
143
4
#1
Как можно вывести диалогом результат работы метода.

Есть класс документ, в нем реализован метод insertParent
На Xpages в диалоге по кнопке ок вызывается метод. Как можно вывести информацию о работе данного метода для пользователя.
Еше вопрос как можно в методе получать SessionScope, ViewScope
 

alexas1

Well-Known Member
Lotus team
10.04.2014
704
242
#2
пиши инфу напр. в поле (или в глобальную переменную, хоть) и показывай, напр. в dijitDialog

в CSJS напр. так: var myVar = #{javascript:viewScope.get("scopeVar")}
такая конструкция выполняет SSJS в CSJS (красное - серверный скрипт)
 

Amfion

Well-Known Member
26.05.2010
143
4
#3
пиши инфу напр. в поле (или в глобальную переменную, хоть) и показывай, напр. в dijitDialog

в CSJS напр. так: var myVar = #{javascript:viewScope.get("scopeVar")}
такая конструкция выполняет SSJS в CSJS (красное - серверный скрипт)
А как получить viewScope в методе что б записать ошибку. И как вызывается этот диалог. Можно какой то пример?
 

alexas1

Well-Known Member
Lotus team
10.04.2014
704
242
#4
про диалоги посмотри всю ветку
про viewScope:
1 viewScope (и др. Scope)- серверная переменная, а "метод" у тебя описан в "клиенте"
2 в "клиенте" (CSJS) можно выполнить серверный (SSJS) скрипт: #{javascript:тут серверный скрипт}
3 в этом скрипте получаешь свой viewScope:
var myVar = #{javascript:viewScope.get("scopeVar")}
или var myVar = #{javascript:viewScope.scopeVar}
scopeVar - твоя запомненная переменная
4 а можешь в SSJS, там, где запоминаешь viewScope, параллельно записать его в поле, чтобы использовать в методе (CSJS) - взять значение из поля (value (editableField) или innerHTML (computedField), в зависимости, что за поле у тебя
 

alexas1

Well-Known Member
Lotus team
10.04.2014
704
242
#5
ЗЫ
для понимания:
в CSJS
var element = document.getElementById("#{id:elementID}")
и
var element = document.getElementById("#{javascript:getClientId("elementID")}");
эквивалентны (т.е ID элемента в клиенте вычисляется сервером! во время построения DOM дерева)
 

Amfion

Well-Known Member
26.05.2010
143
4
#6
про диалоги посмотри всю ветку
про viewScope:
1 viewScope (и др. Scope)- серверная переменная, а "метод" у тебя описан в "клиенте"
2 в "клиенте" (CSJS) можно выполнить серверный (SSJS) скрипт: #{javascript:тут серверный скрипт}
3 в этом скрипте получаешь свой viewScope:
var myVar = #{javascript:viewScope.get("scopeVar")}
или var myVar = #{javascript:viewScope.scopeVar}
scopeVar - твоя запомненная переменная
4 а можешь в SSJS, там, где запоминаешь viewScope, параллельно записать его в поле, чтобы использовать в методе (CSJS) - взять значение из поля (value (editableField) или innerHTML (computedField), в зависимости, что за поле у тебя
Метод описан не в клиенте а в классе.

Для наглядности
<xp:button id="button1" value="Добавит родительскую заявку">
<xp:eventHandler event="onclick" submit="false">
<xp:this.script><![CDATA[XSP.openDialog('#{id:dialog1}')]]></xp:this.script>

</xp:eventHandler></xp:button>
открываем диалог
<xe:dialog id="dialog1" title="Родительская заявка">
<xe:dialogContent id="dialogContent1"><xp:table style="width:100.0%"><xp:tr>
<xp:td style="width:25.0%;text-align:right">Номер:</xp:td>
<xp:td>
<xp:inputText id="inputText21"></xp:inputText></xp:td></xp:tr><xp:tr>
<xp:td style="text-align:right">Год:</xp:td>
<xp:td>
<xp:inputText id="inputText22"></xp:inputText></xp:td></xp:tr></xp:table></xe:dialogContent>
<xe:dialogButtonBar id="dialogButtonBar1">
<xp:button id="button2" value="Добавить">
<xp:eventHandler event="onclick" submit="true"
refreshMode="partial" refreshId="viewPanel1">
<xp:this.script><![CDATA[alert('Добрый день')]]></xp:this.script>
<xp:this.action><![CDATA[#{javascript:claim.insertParentClaim("111111111", "22222222")}]]></xp:this.action>
</xp:eventHandler></xp:button></xe:dialogButtonBar></xe:dialog>
По кнопке добавить мне надо вызвать метод insertParentClaim и вывести его результат на Xpages.

И когда вместо 111111111 беру из диалога значение getComponent("inputText21").getValue() все время первый раз по кнопке идет Null
 
Последнее редактирование модератором:

alexas1

Well-Known Member
Lotus team
10.04.2014
704
242
#7
Метод описан не в клиенте а в классе.
????;)
Работая с диалогом, как у тебя, это чисто работа в клиенте: сервер ещё ничего не знает о том, что находится в "inputText21" "inputText22", а ты берёшь значение в SSJS - getComponent("inputText21").getValue()
Делай, как JohnLemon написал, напр. или передай это значение на сервер (в CSJS, там где у тебя alert('Добрый день')), перед тем, как им воспользоваться: напр, через Submitted Value (поле "$$xspsubmitvalue" есть всегда на xpages и северу оно доступно)
ЗЫ
На мой взгляд, не стоит тащить из ExtLib элементарные контролы, расширять им область применения и получать на них гемор, пока ещё не врубился, как оно работает.
Диалогом может быть любой контейнер, с position:absolute и display:hidden - давай ему нужные координаты и показывай. И всё, никаких гемороев с элементами на нём.
 
Последнее редактирование модератором: