|
|
|
Ajax + Jsp + struts получение значение переменной
|
|||
|---|---|---|---|
|
#18+
Здравствуйте! Есть страничка jsp, в которой есть ajax-запрос Код: javascript 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. Также есть action (struts), в котором запускается поток. Поток выполняется, ждем его и переходим по mapping.findForward. Подскажите как сделать получение признака запуска потока в ajax-запросе. Т.е. в action делаю так Код: java 1. 2. Весь процесс примерно выглядит так: 1) нажали кнопку - отправили запрос(выполняем action и запускаем поток) 2) кнопку сделали disabled до тех пор, пока не получили myThreadStart (т.е. как понимаю, нужно в каком-то интервале проверять эту переменную) 3) если myThreadStart = true, то обновляем страницу и "рисуем" доп.кнопки Как видится - в action делаем следующее Код: java 1. 2. 3. 4. 5. 6. 7. 8. Ну и соответственно получаем значение параметра на стороне jsp . Заранее спасибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2016, 12:26 |
|
||
|
Ajax + Jsp + struts получение значение переменной
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2016, 12:38 |
|
||
|
Ajax + Jsp + struts получение значение переменной
|
|||
|---|---|---|---|
|
#18+
Petro123, нет, не учебное задание. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2016, 12:40 |
|
||
|
Ajax + Jsp + struts получение значение переменной
|
|||
|---|---|---|---|
|
#18+
talent, А зачем вам запуск нового потока, если вы всё равно блокируете поток контейнера в ожидании завершения задачи? Либо вы не так поняли задание, либо городите ерунду по собственной инициативе. Уберите класс Thread из решения вашей задачи. Он вам не нужен. Кроме того JEE строго не рекомендует запускать новых потоков внутри JEE модуля. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2016, 12:45 |
|
||
|
Ajax + Jsp + struts получение значение переменной
|
|||
|---|---|---|---|
|
#18+
talentPetro123, нет, не учебное задание. но вопрос то к вам остался) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2016, 12:52 |
|
||
|
Ajax + Jsp + struts получение значение переменной
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, из "экшена" вызывается поток, в котором выполняется основная задача. Вы предлагаете все перенести в action? Petro123, нет, поменять не получится ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2016, 12:58 |
|
||
|
Ajax + Jsp + struts получение значение переменной
|
|||
|---|---|---|---|
|
#18+
Вообще нужно сделать примерно так: 1) Отправили запрос 2) до того пока myThreadStart = false сделать кнопку "отправки" неактивной 3) после получения myThreadStart = true, скрыть кнопку отправки и показать "другие" кнопки 4) после выполнения задачи скрыть "другие" кнопки и показать кнопку "отправки" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2016, 13:04 |
|
||
|
Ajax + Jsp + struts получение значение переменной
|
|||
|---|---|---|---|
|
#18+
talentBlazkowicz, из "экшена" вызывается поток, в котором выполняется основная задача. Вы описываете что именно вы делаете. Но вы не пишете почему вы это делаете именно так. talentВы предлагаете все перенести в action? Нет. Я не предлагаю. Я указываю на ошибку в решении и вырожаю недоумнение по поводу усложнения решения на ровном месте. Итак, чем вы мотивировались когда писали myThread.start(); ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2016, 13:04 |
|
||
|
Ajax + Jsp + struts получение значение переменной
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, изначально было myThread.run(). Но с таким вариантом в jsp не работает получение "isAlive()" для потока. Для чего вообще используется поток - изначально так было("работает - не трогай") ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2016, 13:09 |
|
||
|
Ajax + Jsp + struts получение значение переменной
|
|||
|---|---|---|---|
|
#18+
talentВообще нужно сделать примерно так: 1) Отправили запрос 2) до того пока myThreadStart = false сделать кнопку "отправки" неактивной 3) после получения myThreadStart = true, скрыть кнопку отправки и показать "другие" кнопки 4) после выполнения задачи скрыть "другие" кнопки и показать кнопку "отправки" Код: javascript 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2016, 13:09 |
|
||
|
Ajax + Jsp + struts получение значение переменной
|
|||
|---|---|---|---|
|
#18+
Код: javascript 1. 2. 3. 4. 5. не подходит, т.к. выполняется после завершения ajax-запроса(после "success" и "error") . Код: javascript 1. 2. 3. 4. 5. 6. 7. 8. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2016, 13:20 |
|
||
|
Ajax + Jsp + struts получение значение переменной
|
|||
|---|---|---|---|
|
#18+
talentне подходит, т.к. выполняется после завершения ajax-запроса(после "success" и "error") . А когда нужно? До? Во время? talent("другие" кнопки - это что-то типа "Остановить" и "Обновить") Аллилуя, братья! Наконец-то партизан начал колоться и давать конкретику. Что делает "Обновить"? Что подразумевается под "Остановить"? Ваша задача умеет останавливаться? Если вы хотите реализовать асинхронный процесс, то зачем вам myThread.join()? В web (который HTTP запрос\ответ) есть куча способов реализовать серверные события https://en.wikipedia.org/wiki/Comet_(programming) Но перед тем как начать педалить решение, стоит выбрать концепцию (переодический опрос, comet или (в пост призывается вадя) WebSocket-ы) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2016, 13:32 |
|
||
|
Ajax + Jsp + struts получение значение переменной
|
|||
|---|---|---|---|
|
#18+
может быть как-нибудь через Код: javascript 1. 2. 3. 4. 5. 6. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2016, 13:34 |
|
||
|
Ajax + Jsp + struts получение значение переменной
|
|||
|---|---|---|---|
|
#18+
talentДля чего вообще используется поток - изначально так было("работает - не трогай") тогда позови взрослого. Вдруг ты бизнес-логику кнопок клиента решаешь за счёт потоков на сервере. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2016, 13:39 |
|
||
|
Ajax + Jsp + struts получение значение переменной
|
|||
|---|---|---|---|
|
#18+
Что делает "Обновить"? Просто, обновление страницы Код: javascript 1. Что подразумевается под "Остановить"? Ваша задача умеет останавливаться? В цикле (while) потока используется условие. При остановке указываем это условие в "false", цикл завершается, поток завершается и осуществляется переход обратно в "экшн" Если вы хотите реализовать асинхронный процесс, то зачем вам myThread.join()? Отображение результатов обработки запроса формируется в потоке, без myThread.join() "экшн" запускает поток и не ждет его завершения - в результате отображение результатов получается не то. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2016, 13:48 |
|
||
|
Ajax + Jsp + struts получение значение переменной
|
|||
|---|---|---|---|
|
#18+
Petro123Вдруг ты бизнес-логику кнопок клиента решаешь за счёт потоков на сервере. Писал же, что изначально было тоже с потоками, только вместо Код: java 1. 2. было Код: java 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2016, 13:51 |
|
||
|
Ajax + Jsp + struts получение значение переменной
|
|||
|---|---|---|---|
|
#18+
Petro123talent, учебное задание? может не struts выбрать? Тогда и потоки не нужны. струтс поновее есть. кстати, нормальный фреймворк... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2016, 13:58 |
|
||
|
Ajax + Jsp + struts получение значение переменной
|
|||
|---|---|---|---|
|
#18+
talentбыло Код: java 1. Ну, так вот это ничем не отличается от прямого вызова метода в котором реализована ваша мистическая задача. Вообще у вас имеется заблуждение, которое проистекает из реализации класса Thread. Thread это способ выполнения. А само решение "задачи" должно иметь вид реализаци Callable. А сам Callable уже можно запускать как душе угодно. А ещё через Thread.start() у вас, вероятно, утекает ClassLoader. Но это уже совсем другая тема. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2016, 14:01 |
|
||
|
Ajax + Jsp + struts получение значение переменной
|
|||
|---|---|---|---|
|
#18+
BlazkowiczНу, так вот это ничем не отличается от прямого вызова метода в котором реализована ваша мистическая задача. Но с таким вариантом в jsp не работает получение "isAlive()" для потока ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2016, 14:04 |
|
||
|
Ajax + Jsp + struts получение значение переменной
|
|||
|---|---|---|---|
|
#18+
talentПросто, обновление страницы при ajax вся страничка не обновляется. Не имеет смысла talentВ цикле (while) потока используется условие. При остановке указываем это условие в "false", цикл завершается, поток завершается и осуществляется переход обратно в "экшн" странно. Поток уже запущен по ajax с клиента. talentОтображение результатов обработки запроса формируется в потоке это JS на клиенте. А не на сервере. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2016, 14:09 |
|
||
|
Ajax + Jsp + struts получение значение переменной
|
|||
|---|---|---|---|
|
#18+
Опишу: 1) Нажимаем кнопку "Отправить" на странице 2) Выполняется action 3) Из action запускается поток // при этом кнопку "Отправить" сделать неактивной 4) В потоке происходят "insert"`ы и "delete"`ы и отображение хода выполнения // при этом кнопки "Обновить" и "Остановить" сделать активными 5) Завершается поток, завершается action // при этом кнопку "Отправить" сделать активной, при этом кнопки "Обновить" и "Остановить" сделать неактивными странно. Поток уже запущен по ajax с клиента. Да, поток запускается по ajax, останавливается по кнопке "Остановить", также при помощи action это JS на клиенте. А не на сервере. Данные для отображения формируются на сервере, на клиенте только их отображение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2016, 14:21 |
|
||
|
Ajax + Jsp + struts получение значение переменной
|
|||
|---|---|---|---|
|
#18+
talent3) Из action запускается поток // при этом кнопку "Отправить" сделать неактивной Нельзя из Action запускать потоки. Это чревато. Вам нужно сказать контейнеру, чтобы запустил вашу задачу. В зависимости от версии JEE вам нужен либо вот этот класс https://docs.oracle.com/javaee/7/api/javax/enterprise/concurrent/ManagedExecutorService.html Либо вот этот http://docs.oracle.com/javaee/6/api/javax/resource/spi/work/WorkManager.html talent4) В потоке происходят "insert"`ы и "delete"`ы и отображение хода выполнения // при этом кнопки "Обновить" и "Остановить" сделать активными Ну, то есть Server push полным ходом. Тогда вам нужен либо Comet, либо WebSocket, чтобы в браузере получать "ход выполнения" talent5) Завершается поток, завершается action // при этом кнопку "Отправить" сделать активной, при этом кнопки "Обновить" и "Остановить" сделать неактивными Вам нужно завершить вашу задачу, а не поток. Научитесь что ли их различать. Пока вы не поймете отличие задачи от потока, так и будете говнокодить без понимания что вообще получается в итоге. talentДа, поток запускается по ajax, останавливается по кнопке "Остановить", также при помощи action Вам стоило изначально упомянуть "долгоиграющий фоновый процесс", эти три слова описывают требования к решению на много красочнее вашего говнокода, в котором фоновый процесс на самом деле не фоновый. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2016, 14:31 |
|
||
|
Ajax + Jsp + struts получение значение переменной
|
|||
|---|---|---|---|
|
#18+
talentОпишу: 1) Нажимаем кнопку "Отправить" на странице Код: java 1. 2) Выполняется action Код: java 1. 3) Из action запускается поток // при этом кнопку "Отправить" сделать неактивной ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2016, 14:35 |
|
||
|
Ajax + Jsp + struts получение значение переменной
|
|||
|---|---|---|---|
|
#18+
BlazkowiczВам стоило изначально упомянуть "долгоиграющий фоновый процесс", эти три слова описывают требования к решению на много красочнее вашего говнокода, в котором фоновый процесс на самом деле не фоновый.Всё уже украдено до нас. Помнится, во 2-м Struts уже был встроен "долгоиграющий процесс", и что характерно - кусок второго стратса даже можно использовать совместно с первым. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2016, 21:52 |
|
||
|
Ajax + Jsp + struts получение значение переменной
|
|||
|---|---|---|---|
|
#18+
Пылинка, да, там(в struts 2) есть ExecAndWait - Extending ExecuteAndWaitInterceptor. Ну опять таки пока непонятно как отображать ход выполнения - бегло посмотрел на "ExecAndWait" насколько понял - отображается статичный текст. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2016, 08:09 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=39355971&tid=2123439]: |
0ms |
get settings: |
11ms |
get forum list: |
21ms |
check forum access: |
5ms |
check topic access: |
5ms |
track hit: |
97ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
88ms |
get tp. blocked users: |
2ms |
| others: | 239ms |
| total: | 482ms |

| 0 / 0 |
