• Познакомьтесь с пентестом веб-приложений на практике в нашем новом бесплатном курсе

    «Анализ защищенности веб-приложений»

    🔥 Записаться бесплатно!

  • CTF с учебными материалами Codeby Games

    Обучение кибербезопасности в игровой форме. Более 200 заданий по Active Directory, OSINT, PWN, Веб, Стеганографии, Реверс-инжинирингу, Форензике и Криптографии. Школа CTF с бесплатными курсами по всем категориям.

Решено Работа с диалогом

  • Автор темы motogarri
  • Дата начала
M

motogarri

Привет.
Окрываю диалогбокс из панели на странице dijit.byId("myDialog").show();
В диалоге надо заполнить несколько полей и при закрытии создать документ с данными из этих полей.

Разобрался как открыть диалог, а вот дальше ни в какую...
Создание нового документа вешать на копку "ОК" в диалоге? У меня никак не получается добраться до полей, как из них значения вытащить?
 
J

JohnLemon

Тут лучше наверно на ssjs делать.
Примерно так:
HTML:
<?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:inputText id="inputText2"></xp:inputText>
<xp:br></xp:br>
<xp:br></xp:br>
<xp:button value="show dialog" id="button3">
<xp:eventHandler event="onclick" submit="true"
refreshMode="partial" refreshId="dialog1">
<xp:this.action><![CDATA[#{javascript:getComponent("dialog1").show();}]]></xp:this.action>
</xp:eventHandler></xp:button>
<xp:br></xp:br>
<xe:dialog id="dialog1" title="Dialog header">
<xe:dialogButtonBar id="dialogButtonBar1">
<xp:panel>
<xp:inputText id="inputText1"></xp:inputText></xp:panel></xe:dialogButtonBar>
<xe:dialogContent id="dialogContent1">
<xp:panel>
<xp:button value="ok" id="button1">
<xp:eventHandler event="onclick" submit="true"
refreshMode="partial" refreshId="inputText2">
<xp:this.action><![CDATA[#{javascript:var value = getComponent("inputText1").getValue();
getComponent("inputText2").setValue(value);
getComponent("dialog1").hide();
 
 
 
 
//создание дока
var document = database.createDocument();
document.replaceItemValue("field", value);
document.save();}]]></xp:this.action>
</xp:eventHandler></xp:button>
<xp:button value="cancel" id="button2">
<xp:eventHandler event="onclick" submit="true"
refreshMode="partial" refreshId="dialog1">
<xp:this.action><![CDATA[#{javascript:getComponent("dialog1").hide();}]]></xp:this.action>
</xp:eventHandler></xp:button></xp:panel></xe:dialogContent></xe:dialog></xp:view>
 

alexas1

Green Team
10.04.2014
1 202
225
BIT
34
1. Прочитать\записать:
var value = dijit.byId('myTextbox').getValue()

var test = dijit.byId("myTextbox");
test.set("value", "somevalue");
но тут есть тонкости

так будет работать всегда: dojo.byId("myTextbox").value = "somevalue"
------------------------------
Но это всё CSJS, а док надо создавать в SSJS, тут танцы с бубнами для начинающих, такшта проще работать просто с полями (напр. как JohnLemon написал)
 
M

motogarri

Extension library на сервер надо установить? Не смогу пока ((

С dojo диалогом получилось добраться до полей. Там у меня косяк был в том, что я использовал обычные поля. Сейчас по сделал по такому примеру и сработало:
HTML:
<input data-dojo-type="dijit.form.TextBox" id="myTextbox"></input>

Видел на форуме много раз поднимался вопрос, как передать данные в диалоге из CSJS в SSJS. И даже успешно все решалось, но я ничего не понял. Пните пожалуйста в нужную сторону.
[DOUBLEPOST=1429831024,1429830987][/DOUBLEPOST]И что-то меня с форума выкидывает постоянно. раз 10 перелогивался и набирал сообщение
 
J

JohnLemon

Extension library на сервер надо установить? Не смогу пока ((
Да
И что-то меня с форума выкидывает постоянно. раз 10 перелогивался и набирал сообщение
Это у всех так с переходом на новый движок )
Пните пожалуйста в нужную сторону
Вот интересный вариант с панелью:
HTML:
<?xml version="1.0" encoding="UTF-8"?>
<xp:view xmlns:xp="http://www.ibm.com/xsp/core">
<xp:this.resources>
<xp:dojoModule name="dijit.Dialog"></xp:dojoModule>
</xp:this.resources>
<xp:scriptBlock id="scriptBlock3">
<xp:this.value><![CDATA[XSP.addOnLoad(function(){
function dialog_create(id) {
  var dialogWidget = dijit.byId(id);
  if( dialogWidget ) dialogWidget.destroyRecursive(true);
  dialogWidget = new dijit.Dialog( { }, dojo.byId(id));
  var dialog = dojo.byId(id);
  dialog.parentNode.removeChild(dialog);
  var form = document.forms[0]; form.appendChild(dialog);
  dialogWidget.startup();
}
dialog_create("myDialog")
});
]]></xp:this.value>
</xp:scriptBlock>
<xp:br></xp:br>
<xp:inputText id="inputText2"></xp:inputText>
<xp:br></xp:br>
<div id="myDialog" style="display:none">
<xp:inputText id="inputText1"></xp:inputText>
<xp:br></xp:br>
<xp:br></xp:br>
<xp:button value="save doc" id="button1">
<xp:eventHandler event="onclick" submit="true"
refreshMode="partial">
<xp:this.action><![CDATA[#{javascript:var value = getComponent("inputText1").getValue();
//присвоение компоненту
getComponent("inputText2").setValue(value);
//создание дока
var doc = database.createDocument();
doc.replaceItemValue("form", "list");
doc.replaceItemValue("field", value);
doc.save();}]]></xp:this.action>
</xp:eventHandler></xp:button>
</div>
<xp:br></xp:br>
<xp:button value="show dialog" id="button2">
<xp:eventHandler event="onclick" submit="false">
<xp:this.script><![CDATA[dijit.byId("myDialog").show();]]></xp:this.script>
</xp:eventHandler>
</xp:button>
</xp:view>
Думаю поможет...
 
M

motogarri

Спасибо за пример и статью.
Сам пример рабочий, а когда у себя на хпейдже делаю, value = getComponent("inputText1").getValue() оказывается пустым.
Ну да ладно, направление понял, разберусь.
 
M

motogarri

Разобрался. У меня к панели, открываемой в диалоге, был подключен источник данных. Убрал-заработало.
 
  • Нравится
Реакции: alexas1
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!