powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle APEX [игнор отключен] [закрыт для гостей] / Submit айтема и submit всей страницы
13 сообщений из 13, страница 1 из 1
Submit айтема и submit всей страницы
    #39301694
vlad6666
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте, уважаемые.
Только начал изучать APEX (последняя версия на http://apex.oracle.com), сразу наткнулся на непонятную особенность.
Пример.
Есть текстовое поле P2_ITEM1. Создал кнопку, к ней DA на событие "Click", к нему действие "Execute PL/SQL code", которое заполняет это поле текущей датой (с секундами, чтобы видеть изменения). В свойствах также указал "Page Items to Submit" - P2_ITEM1, "Page Items to Return" - P2_ITEM1. При нажатии этой кнопки поле заполняется текущей датой, новое значение сразу видно в поле.
Теперь, если обратиться к значению поля в PL/SQL коде как :P2_ITEM1, либо в JavaScript коде как $v('P2_ITEM1'), то доступно новое, только что занесённое значение. А вот если использовать написание &P2_ITEM1. , то получается старое значение.
Это сразу видно при выполнении JS скрипта
alert($v('P2_ITEM1'));
alert('&P2_ITEM1.');

Если после этого сделать submit всей страницы, то новое значение поля доступно и через &P2_ITEM1.

Скажите, это баг или фича?
...
Рейтинг: 0 / 0
Submit айтема и submit всей страницы
    #39301795
!?!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
!?!
Гость
Это не баг и не фича.
Это не понимание того что вы выводите алертом.
Посмотрите код алертов в браузере возможно вам станет понятней.
...
Рейтинг: 0 / 0
Submit айтема и submit всей страницы
    #39301914
vlad6666
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Посмотрел в браузере код страницы - стало ещё более непонятно...
Мои два алерта, повешенные на кнопку, выглядят так:
alert($v('P2_ITEM1'));
alert('<здесь новое значение поля в текстовом виде>');

Т.е., во втором алерте в явном виде задано новое значение поля (к примеру, '01.09.2016 10:16:39'). Но при нажатии на кнопку выводится старое значение ('01.09.2016 10:15:27').

Можно и без алертов.
Создадим второе текстовое поле P2_ITEM2, и будем заполнять его значением из первого.
Если заполнять кодом PL/SQL
:P2_ITEM2 := :P2_ITEM1;
или кодом JS
$s('P2_ITEM2',$v('P2_ITEM1'));
то значение поля будет новое.
А если заполнять кодом JS
$s('P2_ITEM2','&P2_ITEM1.');
или через DA действием "Set Value", подставляя значение &P2_ITEM1. , то значение &P2_ITEM1. , как и в алертах, выдаёт старое значение.

Я не занудствую, хочется понять, какое практическое применение может быть у &P2_ITEM1. без полного submit-а всей страницы.
...
Рейтинг: 0 / 0
Submit айтема и submit всей страницы
    #39301924
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vlad6666В свойствах также указал "Page Items to Submit" - P2_ITEM1, "Page Items to Return" - P2_ITEM1.
придумай адекватную задачу с разными полями, а не одинаковыми.
...
Рейтинг: 0 / 0
Submit айтема и submit всей страницы
    #39301958
!?!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
!?!
Гость
$v('<Имя переменной>') - это JS функция обращается к элементу с ID=<Имя переменной> и получает его значение
(делает что то типа GetElementById('<Имя переменной>').value)
:<Имя переменной> - это в PL/SQL происходит подстановка переменной
(скорее всего там происходит что то типа dbms_sql.bind_variable(c,'<Имя переменной>','<значение>')
&<Имя переменной>. - это подстановка в HTML, apex не хранит страницы он при обращении их генерирует, из своих шаблонов из того что вы ввели, когда он генерирует страницу он заменяет &<Имя переменной>. на <значение>.

Что использовать и в какой момент решать вам.
...
Рейтинг: 0 / 0
Submit айтема и submit всей страницы
    #39302087
vlad6666
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем откликнувшимся спасибо. Поэкспериментировал ещё, и уяснил для себя, что &P2_ITEM1. содержит актуальное значение (соответствующее тому, что видно на экране) либо после полного сабмита всей страницы (если поле P2_ITEM1 не сабмитилось ранее отдельно), либо после рефреша страницы (если значение уже передано на сервер, т.е., если ранее был сабмит поля, например, в рамках DA с операцией "Execute PL/SQL code" и опцией "Page Items to Submit" = P2_ITEM1).
Т.е., в принципе, в один момент времени в разных местах могут лежать три разных значения одного поля:
1. &P2_ITEM1., лежащее где-то в браузере в статическом виде
2. значение, отправленное ранее на сервер сабмитом
3. значение, отображаемое в поле на экране.
...
Рейтинг: 0 / 0
Submit айтема и submit всей страницы
    #39302124
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vlad6666в один момент времени в разных местах могут лежать три разных значения одного поля:
перебор)
- 2 штуки. На сервере и на клиенте. всё.
...
Рейтинг: 0 / 0
Submit айтема и submit всей страницы
    #39302157
vlad6666
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Petro123перебор)
- 2 штуки. На сервере и на клиенте. всё.

1. Ввели в браузере в поле значение 111

в поле - 111
на сервере - пусто
в &ITEM. - пусто

2. Submit страницы

в поле - 111
на сервере - 111
в &ITEM. - 111

3. Изменили значение поля на 222

в поле - 222
на сервере - 111
в &ITEM. - 111

4. Submit одного поля (напр., через DA с PL/SQL кодом)

в поле - 222
на сервере - 222
в &ITEM. - 111

5. Изменили значение поля на 333

в поле - 333
на сервере - 222
в &ITEM. - 111
...
Рейтинг: 0 / 0
Submit айтема и submit всей страницы
    #39302163
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vlad66664. Submit одного поля (напр., через DA с PL/SQL кодом)
в поле - 222
на сервере - 222
в &ITEM. - 111
этот код не имеет смысла без предварительной отправки с клиента на сервер СВЕЖЕГО значения.
Это делается декларативно в Page Items to Submit - указать поле.
Тогда сначала отправится значение на сервер, потом выполнится код.
...
Рейтинг: 0 / 0
Submit айтема и submit всей страницы
    #39302173
vlad6666
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Petro123vlad66664. Submit одного поля (напр., через DA с PL/SQL кодом)
в поле - 222
на сервере - 222
в &ITEM. - 111
этот код не имеет смысла без предварительной отправки с клиента на сервер СВЕЖЕГО значения.
Это делается декларативно в Page Items to Submit - указать поле.
Тогда сначала отправится значение на сервер, потом выполнится код.

Я про это и пишу - ввели в поле свежее значение 222, после чего отправили его на сервер (DA с PL/SQL кодом, с указанием в Page Items to Submit этого поля).
После этого ввели в поле ещё более свежее значение 333.
При этом в &ITEM. так и осталось самое первое значение 111.
Если сделать рефреш страницы, оно станет 222 (при этом и поле сбросится на 222), если сабмит страницы, то 333.
...
Рейтинг: 0 / 0
Submit айтема и submit всей страницы
    #39302181
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vlad6666Я про это и пишу
нет. Вот тут ты ноль реакции
19617211
...
Рейтинг: 0 / 0
Submit айтема и submit всей страницы
    #39302187
vlad6666
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Petro123vlad6666Я про это и пишу
нет. Вот тут ты ноль реакции
19617211

Я написал, что " ... в принципе , в один момент времени в разных местах могут лежать три разных значения одного поля", и проиллюстрировал это.
Т.е., APEX допускает такую ситуацию (возможно, она возникнет только у говнокодеров типа меня).
Но, тем не менее, факт - в разных местах могут одновременно существовать три разных значения одного поля.
...
Рейтинг: 0 / 0
Submit айтема и submit всей страницы
    #39302202
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vlad6666,
не хочешь делать нормальный тест - твоё дело.
Удачи!
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / Oracle APEX [игнор отключен] [закрыт для гостей] / Submit айтема и submit всей страницы
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]