• Курсы Академии Кодебай, стартующие в мае - июне, от команды The Codeby

    1. Цифровая криминалистика и реагирование на инциденты
    2. ОС Linux (DFIR) Старт: 16 мая
    3. Анализ фишинговых атак Старт: 16 мая Устройства для тестирования на проникновение Старт: 16 мая

    Скидки до 10%

    Полный список ближайших курсов ...

Решено Проблема взятия данных сервером из полей, заполненых на стороне клиента.

Ficoos

Lotus Team
15.03.2016
136
2
BIT
119
Доброго времени суток, коллеги. Появилась новая напасть: Есть страница xpage, которая заполняется на стороне клиента.
Код:
XSP.getElementById("#{id:fieldText}").value = "qwerty"
На стороне сервера сне надо создать документ Notes и передать в него значения полей xpage:
Код:
doc.replaceItemValue("Path", @Text(getComponent('fieldText').value))
Так вот: на стороне сервера значения полей нет! Возвращает либо пусто, либо null. В браузере посмотрел что находится в полях:
Код:
<input type="text" id="view:_id1:_id2:fieldText" name="view:_id1:_id2:fieldText" disabled="disabled" class="xspInputFieldEditBox">
Т.е. занчения или не существует или оно есть только на странице?
как на стороне сервера изъять значение и передать его документу Notes?
Помогите разобраться!
 
Последнее редактирование:

Ficoos

Lotus Team
15.03.2016
136
2
BIT
119
Есть еще непонятное: на странице есть кнопка, которая на стороне клиента делает rest запрос на чужой сервер, получает ответ, заполняет поля. А потом запускает кнопку, у которой программа работает на стороне сервера и создает notes документ, заполняя поля из xpage документа и сохраняет в базе. (собственно не все поля доступны. от сюда и первый вопрос был в первом посте.) а заполняя по-новой поля на странице( без обновления страницы), кнопка уже ничего не делает: ни запроса, ни запуска другой кнопки.
Как добиться повторного запуска программы кнопок без обновления страницы?
 

garrick

Lotus Team
26.10.2009
1 352
151
BIT
208
А почему не пошли классическим путём?
Сделать форму, привязать её к странице и само всё сохранится при сабмите.

Со вторым вопросом вообще странное - в архитектуре какая-то чехарда.
 

Ficoos

Lotus Team
15.03.2016
136
2
BIT
119
А почему не пошли классическим путём?
Сделать форму, привязать её к странице и само всё сохранится при сабмите.

Со вторым вопросом вообще странное - в архитектуре какая-то чехарда.
База досталась по наследству. Пока ломать рабочую нет желания, а новые требования растут - расчувствовали вкус и аппетит заказчиков растет. В будущем попробую переделать.

По поводу второго: обычно после обновления страницы обнуляются все поля, в том числе и те, где хранятся токены оператора. Эти токены нужны для запросов. Если токен не совпадает с выданным сервером при входе в систему по логину и паролю (это выдает НЕ лотусовый сервер) , то необходимо перелогинится и получить новый токен. А после каждой операции отработки кнопок перелогиниваться - жутко неудобно. Это за 8-и-часовой рабочий день надо от 10 - 3000 раз. Это жопа для оператора. )
От сюда и вопрос: Почему кнопка JS не отрабатывает после повторного нажатия без обновления страницы или элемента страницы xpage?
 
Последнее редактирование:

garrick

Lotus Team
26.10.2009
1 352
151
BIT
208
По поводу сохранения токенов самое простое - почитайте что-нибудь в хелпе про SessionScope переменные.
Что там с кнопкой так не скажешь, надо смотреть какой тип кнопки, какой в ней код, какой код на открытие страницы и т.п. Может быть много всего.

Есть еще непонятное: на странице есть кнопка, которая на стороне клиента делает rest запрос на чужой сервер, получает ответ, заполняет поля. А потом запускает кнопку, у которой программа работает на стороне сервера и создает notes документ, заполняя поля из xpage документа и сохраняет в базе.

Ну а почему не делать запрос на сервере и сразу там же генерить новый документ? Зачем вся эта чехарда?
 

garrick

Lotus Team
26.10.2009
1 352
151
BIT
208
тот же код, что у вас в кнопке на клиенте обращается к REST сервису переносите в SSJS библиотеку в какую-нибудь функцию и вызываете её той же кнопкой но на сервере. И там и там JavaScript, возможно придётся что-то немножко переделать, но не много. В том же коде легко можно написать функцию создания нового документа.

А можно и вовсе всё на Java написать и оформить в виде бина.

А можно агента вызвать по HTTP

вариантов много разных...
 

Ficoos

Lotus Team
15.03.2016
136
2
BIT
119
тот же код, что у вас в кнопке на клиенте обращается к REST сервису переносите в SSJS библиотеку в какую-нибудь функцию и вызываете её той же кнопкой но на сервере. И там и там JavaScript, возможно придётся что-то немножко переделать, но не много. В том же коде легко можно написать функцию создания нового документа.

А можно и вовсе всё на Java написать и оформить в виде бина.

А можно агента вызвать по HTTP

вариантов много разных...
Вобщем-то речь не о том что и где вызывать, это потом решу, когда будет что передавать агенту.
Речь о том, что на странице поле заполнено текстом, например: "Привет!". Но когда пытаюсь на стороне сервера забрать значение, то получаю "null" (getComponent("inputText1").value). Вопрос в этом.
 

garrick

Lotus Team
26.10.2009
1 352
151
BIT
208
А каким образом вы значение поля, содержание страницы передали на сервер? Не думаете же вы, что сервер сам залезет на компьютер пользователя и почитает что он там заполнил у себя на странице?
 

Ficoos

Lotus Team
15.03.2016
136
2
BIT
119
А каким образом вы значение поля, содержание страницы передали на сервер? Не думаете же вы, что сервер сам залезет на компьютер пользователя и почитает что он там заполнил у себя на странице?
Вот я и хочу выяснить способ передачи данных. Помогите разобраться!
 

garrick

Lotus Team
26.10.2009
1 352
151
BIT
208
Мне сложно давать вам какие-то советы не зная что там у вас есть, что вы там строите и что хотите из всего этого получить в итоге. Спрашивайте как-то подробнее что-ли. Объясните ситуацию в целом, а не мелкими деталями.
 

Ficoos

Lotus Team
15.03.2016
136
2
BIT
119
Мне сложно давать вам какие-то советы не зная что там у вас есть, что вы там строите и что хотите из всего этого получить в итоге. Спрашивайте как-то подробнее что-ли. Объясните ситуацию в целом, а не мелкими деталями.
Спасибо!
Есть первая страница, на которой вводятся логин и пароль. После проверки открывается вторая страница, в которую передаются параметры, среди которых и логин, что бы потом этот логин передавать документу Notes, что бы в дальнейшем знать кто создавал документ. Логин записывается в редактируемое поле. Есть свойство этого поле - "Disabled", что бы исключить ручное заполнение. Выбрано это потому, что если поставить поле просто "для чтения" или "вычисляемое", то на стороне клиента туду никак не передать значение - оно не отображается в поле на странице. После заполнения всех необходимых полей на второй странице, значения передаются в json запрос на сторонний сервер, после чего создается Notes документ и записывает документ на сервере. Значение логин - отсутствует: getComponent("inputText1").value.
Подозреваю, что передать значение не удается, потому что свойство поля "Disabled"
 

garrick

Lotus Team
26.10.2009
1 352
151
BIT
208
Логин, имя пользователя из адресной книги Domino вообще никуда передавать не надо, оно всегда вычисляется из Session в Java и NotesSession в LotusScript или JavaScript. Для XPages это будет так
 

Ficoos

Lotus Team
15.03.2016
136
2
BIT
119
Логин, имя пользователя из адресной книги Domino вообще никуда передавать не надо, оно всегда вычисляется из Session в Java и NotesSession в LotusScript или JavaScript. Для XPages это будет так
логин и пароль - стороннего сервера. А на странице Domino xpage - Anonymous
 

garrick

Lotus Team
26.10.2009
1 352
151
BIT
208
Для вызова REST/JSON сервиса есть куча вариантов - напишите агент, функцию в SSJS библиотеке, сервлет, XPages страницу где нужный код выполняется в каком-либо из Events до открытия страницы, . В том же коде, получив ответ сервиса можно создать и сохранить документ в базе. В последнем варианте можно будет ещё открыть и показать пользователю новый документ, если надо. Вызов этого кода из кнопки, передача параметров в код вызывающий сервис будет зависеть от способа реализации из перечисленных выше.
 

Ficoos

Lotus Team
15.03.2016
136
2
BIT
119
Для вызова REST/JSON сервиса есть куча вариантов - напишите агент, функцию в SSJS библиотеке, сервлет, XPages страницу где нужный код выполняется в каком-либо из Events до открытия страницы, . В том же коде, получив ответ сервиса можно создать и сохранить документ в базе. В последнем варианте можно будет ещё открыть и показать пользователю новый документ, если надо. Вызов этого кода из кнопки, передача параметров в код вызывающий сервис будет зависеть от способа реализации из перечисленных выше.
Спасибо за совет. Но на это нужно время, а сервис сейчас - рабочий. Боюсь сломать.
Сейчас меня больше интересует поле, где хранистя логин. Это даже приоритетная задача: почему на стороне сервера поле имеет значение null. Предположение: это поле имеет свойство "Disabled". Может ли это свойство скрывать значение для сервера?
 

garrick

Lotus Team
26.10.2009
1 352
151
BIT
208
Ещё вариант - делайте всё в одном документе. В базе форма документа со всеми полями (имя пользоваеля, параметры для вызова сервиса, то что вы хотите сохранить в новом документе, очевидно какой-то ответ сервиса)
1. Пользователь вводи имя/пароль, нажимает кнопку (Submit) по которой открывается другая страница, но с этим же документом.
2. Пользователь заполняет поля, нажимает кнопку (запрос на сервис, получение ответа и сохранения результатов в этом же документе). Для сохранения значений полей кнопку следует сделать Submit, страница при этом закроется, можно открыть её снова при необходимость, через events кнопки.
 

garrick

Lotus Team
26.10.2009
1 352
151
BIT
208
Спасибо за совет. Но на это нужно время, а сервис сейчас - рабочий. Боюсь сломать.
Сейчас меня больше интересует поле, где хранистя логин. Это даже приоритетная задача: почему на стороне сервера поле имеет значение null. Предположение: это поле имеет свойство "Disabled". Может ли это свойство скрывать значение для сервера?
Я полагаю, что просто у вас в переходе от первой страницы ко второй нигде ничего не сохраняется. Вы не можете чисто технически считать значение поля из другой страницы, вы должны передать его как параметр при открытии второй страницы либо сохранить в базе или scope переменной.
 

Ficoos

Lotus Team
15.03.2016
136
2
BIT
119
Я полагаю, что просто у вас в переходе от первой страницы ко второй нигде ничего не сохраняется. Вы не можете чисто технически считать значение поля из другой страницы, вы должны передать его как параметр при открытии второй страницы либо сохранить в базе или scope переменной.
Передается в качестве параметра второй странице. Параметр разбирается по запчастям и помещается в поля, среди которых и логин.
 
Мы в соцсетях:

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