Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Ajax + Jsp + struts получение значение переменной / 25 сообщений из 30, страница 1 из 2
28.11.2016, 12:26
    #39355868
talent
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ajax + Jsp + struts получение значение переменной
Здравствуйте!
Есть страничка jsp, в которой есть ajax-запрос
Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
$(function() {
		$("#replaceBtn").click(function () {
			$.ajax({
				type: 'POST',
				url: 'action.do',
				dataType: 'json',
				data: 'prType=' + $('#prType').val() + '&rDate=' + $('#rDate').val(),
				success: function (response) {
                                        console.log(response);
					location.reload();
				},
				error: function (response) {
					console.log(response);
					location.reload();
				}
			});
		});
	});



Также есть action (struts), в котором запускается поток. Поток выполняется, ждем его и переходим по mapping.findForward. Подскажите как сделать получение признака запуска потока в ajax-запросе. Т.е. в action делаю так

Код: java
1.
2.
myThread.start();
boolean myThreadStart = true;// значение этого параметра нужно получить на jsp


Весь процесс примерно выглядит так:
1) нажали кнопку - отправили запрос(выполняем action и запускаем поток)
2) кнопку сделали disabled до тех пор, пока не получили myThreadStart (т.е. как понимаю, нужно в каком-то интервале проверять эту переменную)
3) если myThreadStart = true, то обновляем страницу и "рисуем" доп.кнопки

Как видится - в action делаем следующее
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
myThread.start();
JSONObject objTw = new JSONObject();
objTw.put("myThreadStart", "true");
PrintWriter out = response.getWriter();
response.setContentType("application/json");
response.setCharacterEncoding("utf-8");
out.println(objTw);
myThread.join();


Ну и соответственно получаем значение параметра на стороне jsp . Заранее спасибо!
...
Рейтинг: 0 / 0
28.11.2016, 12:38
    #39355877
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ajax + Jsp + struts получение значение переменной
talent,
учебное задание?

может не struts выбрать? Тогда и потоки не нужны.
...
Рейтинг: 0 / 0
28.11.2016, 12:40
    #39355880
talent
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ajax + Jsp + struts получение значение переменной
Petro123, нет, не учебное задание.
...
Рейтинг: 0 / 0
28.11.2016, 12:45
    #39355884
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ajax + Jsp + struts получение значение переменной
talent,

А зачем вам запуск нового потока, если вы всё равно блокируете поток контейнера в ожидании завершения задачи? Либо вы не так поняли задание, либо городите ерунду по собственной инициативе. Уберите класс Thread из решения вашей задачи. Он вам не нужен. Кроме того JEE строго не рекомендует запускать новых потоков внутри JEE модуля.
...
Рейтинг: 0 / 0
28.11.2016, 12:52
    #39355887
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ajax + Jsp + struts получение значение переменной
talentPetro123, нет, не учебное задание.
но вопрос то к вам остался)
...
Рейтинг: 0 / 0
28.11.2016, 12:58
    #39355893
talent
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ajax + Jsp + struts получение значение переменной
Blazkowicz, из "экшена" вызывается поток, в котором выполняется основная задача. Вы предлагаете все перенести в action?

Petro123, нет, поменять не получится
...
Рейтинг: 0 / 0
28.11.2016, 13:04
    #39355896
talent
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ajax + Jsp + struts получение значение переменной
Вообще нужно сделать примерно так:
1) Отправили запрос
2) до того пока myThreadStart = false сделать кнопку "отправки" неактивной
3) после получения myThreadStart = true, скрыть кнопку отправки и показать "другие" кнопки
4) после выполнения задачи скрыть "другие" кнопки и показать кнопку "отправки"
...
Рейтинг: 0 / 0
28.11.2016, 13:04
    #39355897
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ajax + Jsp + struts получение значение переменной
talentBlazkowicz, из "экшена" вызывается поток, в котором выполняется основная задача.
Вы описываете что именно вы делаете. Но вы не пишете почему вы это делаете именно так.

talentВы предлагаете все перенести в action?
Нет. Я не предлагаю. Я указываю на ошибку в решении и вырожаю недоумнение по поводу усложнения решения на ровном месте. Итак, чем вы мотивировались когда писали myThread.start(); ?
...
Рейтинг: 0 / 0
28.11.2016, 13:09
    #39355902
talent
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ajax + Jsp + struts получение значение переменной
Blazkowicz, изначально было myThread.run(). Но с таким вариантом в jsp не работает получение "isAlive()" для потока. Для чего вообще используется поток - изначально так было("работает - не трогай")
...
Рейтинг: 0 / 0
28.11.2016, 13:09
    #39355903
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ajax + Jsp + struts получение значение переменной
talentВообще нужно сделать примерно так:
1) Отправили запрос
2) до того пока myThreadStart = false сделать кнопку "отправки" неактивной
3) после получения myThreadStart = true, скрыть кнопку отправки и показать "другие" кнопки
4) после выполнения задачи скрыть "другие" кнопки и показать кнопку "отправки"

Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
$("#replaceBtn").click(function () {
    disableMyButtons();
    $.ajax({
        ...
        complete: function (response) {
                enableMyButtons();
        },
        ...
    });
});
...
Рейтинг: 0 / 0
28.11.2016, 13:20
    #39355911
talent
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ajax + Jsp + struts получение значение переменной
Код: javascript
1.
2.
3.
4.
5.
....
 complete: function (response) {
                enableMyButtons();
        }
....


не подходит, т.к. выполняется после завершения ajax-запроса(после "success" и "error") .

Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
disableMyButtons(); // здесь делаем неактивной кнопку "отправки"
    $.ajax({
        ...
        complete: function (response) {
                enableMyButtons();// здесь делаем "другие" кнопки активными, но только после обработки запроса. Нужно чтобы они были активны во время обработки запроса ("другие" кнопки - это что-то типа "Остановить" и "Обновить")
        },
        ...
    });
...
Рейтинг: 0 / 0
28.11.2016, 13:32
    #39355920
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ajax + Jsp + struts получение значение переменной
talentне подходит, т.к. выполняется после завершения ajax-запроса(после "success" и "error") .

А когда нужно? До? Во время?

talent("другие" кнопки - это что-то типа "Остановить" и "Обновить")

Аллилуя, братья! Наконец-то партизан начал колоться и давать конкретику.
Что делает "Обновить"?
Что подразумевается под "Остановить"? Ваша задача умеет останавливаться?

Если вы хотите реализовать асинхронный процесс, то зачем вам myThread.join()?

В web (который HTTP запрос\ответ) есть куча способов реализовать серверные события
https://en.wikipedia.org/wiki/Comet_(programming)
Но перед тем как начать педалить решение, стоит выбрать концепцию (переодический опрос, comet или (в пост призывается вадя) WebSocket-ы)
...
Рейтинг: 0 / 0
28.11.2016, 13:34
    #39355922
talent
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ajax + Jsp + struts получение значение переменной
может быть как-нибудь через
Код: javascript
1.
2.
3.
4.
5.
6.
var timerId = setInterval(function() {
var startProc = %myThreadStart%;
if (!startProc) {
   clearInterval(timerId);
}
}, 2000);
...
Рейтинг: 0 / 0
28.11.2016, 13:39
    #39355927
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ajax + Jsp + struts получение значение переменной
talentДля чего вообще используется поток - изначально так было("работает - не трогай")
тогда позови взрослого.
Вдруг ты бизнес-логику кнопок клиента решаешь за счёт потоков на сервере.
...
Рейтинг: 0 / 0
28.11.2016, 13:48
    #39355935
talent
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ajax + Jsp + struts получение значение переменной
Что делает "Обновить"?

Просто, обновление страницы

Код: javascript
1.
onClick="javascript:window.location = 'main.jsp'" // это тоже переделывать



Что подразумевается под "Остановить"? Ваша задача умеет останавливаться?

В цикле (while) потока используется условие. При остановке указываем это условие в "false", цикл завершается, поток завершается и осуществляется переход обратно в "экшн"

Если вы хотите реализовать асинхронный процесс, то зачем вам myThread.join()?

Отображение результатов обработки запроса формируется в потоке, без myThread.join() "экшн" запускает поток и не ждет его завершения - в результате отображение результатов получается не то.
...
Рейтинг: 0 / 0
28.11.2016, 13:51
    #39355938
talent
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ajax + Jsp + struts получение значение переменной
Petro123Вдруг ты бизнес-логику кнопок клиента решаешь за счёт потоков на сервере.
Писал же, что изначально было тоже с потоками, только вместо
Код: java
1.
2.
myThread.start();
myThread.join();



было
Код: java
1.
myThread.run();
...
Рейтинг: 0 / 0
28.11.2016, 13:58
    #39355944
rema174
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ajax + Jsp + struts получение значение переменной
Petro123talent,
учебное задание?

может не struts выбрать? Тогда и потоки не нужны.
струтс поновее есть. кстати, нормальный фреймворк...
...
Рейтинг: 0 / 0
28.11.2016, 14:01
    #39355948
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ajax + Jsp + struts получение значение переменной
talentбыло
Код: java
1.
myThread.run();


Ну, так вот это ничем не отличается от прямого вызова метода в котором реализована ваша мистическая задача.

Вообще у вас имеется заблуждение, которое проистекает из реализации класса Thread. Thread это способ выполнения. А само решение "задачи" должно иметь вид реализаци Callable. А сам Callable уже можно запускать как душе угодно.

А ещё через Thread.start() у вас, вероятно, утекает ClassLoader. Но это уже совсем другая тема.
...
Рейтинг: 0 / 0
28.11.2016, 14:04
    #39355951
talent
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ajax + Jsp + struts получение значение переменной
BlazkowiczНу, так вот это ничем не отличается от прямого вызова метода в котором реализована ваша мистическая задача.

Но с таким вариантом в jsp не работает получение "isAlive()" для потока
...
Рейтинг: 0 / 0
28.11.2016, 14:09
    #39355957
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ajax + Jsp + struts получение значение переменной
talentПросто, обновление страницы
при ajax вся страничка не обновляется. Не имеет смысла
talentВ цикле (while) потока используется условие. При остановке указываем это условие в "false", цикл завершается, поток завершается и осуществляется переход обратно в "экшн"
странно. Поток уже запущен по ajax с клиента.
talentОтображение результатов обработки запроса формируется в потоке
это JS на клиенте. А не на сервере.
...
Рейтинг: 0 / 0
28.11.2016, 14:21
    #39355964
talent
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ajax + Jsp + struts получение значение переменной
Опишу:
1) Нажимаем кнопку "Отправить" на странице
2) Выполняется action
3) Из action запускается поток // при этом кнопку "Отправить" сделать неактивной
4) В потоке происходят "insert"`ы и "delete"`ы и отображение хода выполнения // при этом кнопки "Обновить" и "Остановить" сделать активными
5) Завершается поток, завершается action // при этом кнопку "Отправить" сделать активной, при этом кнопки "Обновить" и "Остановить" сделать неактивными

странно. Поток уже запущен по ajax с клиента.

Да, поток запускается по ajax, останавливается по кнопке "Остановить", также при помощи action

это JS на клиенте. А не на сервере.

Данные для отображения формируются на сервере, на клиенте только их отображение.
...
Рейтинг: 0 / 0
28.11.2016, 14:31
    #39355971
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ajax + Jsp + struts получение значение переменной
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

Вам стоило изначально упомянуть "долгоиграющий фоновый процесс", эти три слова описывают требования к решению на много красочнее вашего говнокода, в котором фоновый процесс на самом деле не фоновый.
...
Рейтинг: 0 / 0
28.11.2016, 14:35
    #39355977
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ajax + Jsp + struts получение значение переменной
talentОпишу:
1) Нажимаем кнопку "Отправить" на странице
Код: java
1.
==== AJAX POST забыл?


2) Выполняется action
Код: java
1.
===== не знаю struts, но при сервлете поток запускает сам контейнер. Программист ни при чём.


3) Из action запускается поток // при этом кнопку "Отправить" сделать неактивной
...
Рейтинг: 0 / 0
29.11.2016, 21:52
    #39357318
Пылинка
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ajax + Jsp + struts получение значение переменной
BlazkowiczВам стоило изначально упомянуть "долгоиграющий фоновый процесс", эти три слова описывают требования к решению на много красочнее вашего говнокода, в котором фоновый процесс на самом деле не фоновый.Всё уже украдено до нас.
Помнится, во 2-м Struts уже был встроен "долгоиграющий процесс", и что характерно - кусок второго стратса даже можно использовать совместно с первым.
...
Рейтинг: 0 / 0
30.11.2016, 08:09
    #39357395
talent
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ajax + Jsp + struts получение значение переменной
Пылинка, да, там(в struts 2) есть ExecAndWait - Extending ExecuteAndWaitInterceptor. Ну опять таки пока непонятно как отображать ход выполнения - бегло посмотрел на "ExecAndWait" насколько понял - отображается статичный текст.
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Ajax + Jsp + struts получение значение переменной / 25 сообщений из 30, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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