powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Сохранение данных на onunload
18 сообщений из 18, страница 1 из 1
Сохранение данных на onunload
    #37647148
rus_sun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Думаю, это типичная проблема и должно быть стандартное решение.
Есть форма в ней поля ввода, надо чтобы данные введенные пользователем сохранялись даже, если пользователь не нажмет кнопку "Сохранить" в форме и закроет страницу.
Я попробовал скомбинировать функцию javascript вызывая ее на onunload

Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
<script type="text/javascript">
function OnUnload()
{
document.inputForm.submit();
}
</script>
</head>
<body onunload="OnUnload()">
<h:form name="inputForm">
<h:inputText label="Имя" value="#{person.name}"/>
<h:commandButton value="Сохранить" action="bean.save(person)"/>
</h:form>



У меня приложение Seam-2.2.2-Final. В качестве бэкбина (bean) использую stateful ejb. В методе бина с пометкой @Destroy вызываю функцию save(). Этот метод должен автоматически вызываться перед удалением бина, он и вызывается, но javascript функция OnUnload() не успевает видимо передавать данные поля с введенным именем.

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
@Name("bean")
@Scope(SESSION)
@Stateful
public class Bean implements BeanLocale {
@In@Out
private Person person;
@PersistenceContext
private EntityManager em;

public void save(){
em.merge(person);
}

@Destroy
@Remove
public void destroy(){
save();
em.flush();
}
}




Буду очень рад подсказке.
...
Рейтинг: 0 / 0
Сохранение данных на onunload
    #37647267
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А что если форма будет содержать невалидные данные? Я к тому что глуповатое решение, лучше повесь на инпуты ajax запросы и сохраняй где тебе надо, попутно валидируя, хотя я смысла вашей задачи все равно не понимаю
...
Рейтинг: 0 / 0
Сохранение данных на onunload
    #37647280
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
забыл никЯ к тому что глуповатое решение

+1 т.к. при нажатии на крест вверху страницы = Отмена по стандарту Виндовс.
...
Рейтинг: 0 / 0
Сохранение данных на onunload
    #37647782
rus_sun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
забыл ник,

я упростил то, что у меня на самом деле. Что касается валидации, я использую <rich:ajaxValidator event="onblur" />
А как Вы предлагаете использовать ajax, чтобы данные сразу передавались в бин?
Мне казалось мое решение вполне удачным, если бы оно работало. Проблема в том, что мое приложение для callcenter. Когда приходит звонок приходит и url соответствующего сценария, который открывается в броузере оператора, на обработку оператору дается ограниченное время, по окончанию которого, приходит новый url возможно с другим сценарием, и если оператор не успел нажать на кнопку, чтобы сохранить данные предыдущего сценария, данные будут потеряны. Сохранится на onunload в данном случае казалось мне логичным.
...
Рейтинг: 0 / 0
Сохранение данных на onunload
    #37647845
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rus_sun,
тебе же подсказали.
Убери двойственность логики.
Убери кнопку сохранить. Повесь инормационную лейбу Заполнен \ Незаполнен как в иклипсе.
И на каждый ввод в поле - передавай \ сохраняй.
...
Рейтинг: 0 / 0
Сохранение данных на onunload
    #37648416
rus_sun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123,
Я сделал так: как показано ниже, вроде бы при изменении поля в inplaceInput должен вызываться метод save и данные сохранятся, но вызов метода не происходит. Не подскажите, что я не так делаю

Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
<h:form>
                        
                        <rich:messages >
                            <f:facet name="errorMarker">
                                <h:graphicImage value="../img/error.gif"/>
                            </f:facet> 
                        </rich:messages>
                       
                                
                                    <h:panelGrid columns="2">
                                        <h:outputText value="Фамилия"/>
                                        
                                        <rich:inplaceInput id="_secondName" value="#person.secondName}"  onchange="#backBean.save()}">
                                            <rich:ajaxValidator event="onviewactivated"/> 
                                        </rich:inplaceInput>

                                        <h:outputText value="Имя"/>

                                        <rich:inplaceInput id="_firstName" value="#{person.firstName}"
                                                           onchange="#{backBean.save()}" >
                                            <rich:ajaxValidator event="onviewactivated"/>
                                        </rich:inplaceInput>
</h:form>
...
Рейтинг: 0 / 0
Сохранение данных на onunload
    #37648439
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rus_sun,
Отлаживай!
- напр. вместо бина - JS Message и т.д.
...
Рейтинг: 0 / 0
Сохранение данных на onunload
    #37648537
ShSerge
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rus_sun,

На самом деле, onunload, а не OnUnload. Но это - вторично. Эта штука у Вас по-человечески не заработает. Юзер может отключить питание, просто закрыть ноутбук и т.д. и т.п. .
...
Рейтинг: 0 / 0
Сохранение данных на onunload
    #37648553
rus_sun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123,

извините мою неопытность, а как это вместо бина вызывать JS message и что это дает?
...
Рейтинг: 0 / 0
Сохранение данных на onunload
    #37648558
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ShSergerus_sun,

На самом деле, onunload, а не OnUnload. Но это - вторично. Эта штука у Вас по-человечески не заработает. Юзер может отключить питание, просто закрыть ноутбук и т.д. и т.п. .
не, я предложил Короткие транзакции на ПОЛЕ класса, а не на класс.
- при изменении поля (сняли фокус) - сохранение в БД.
Раз такая постановка :)
...
Рейтинг: 0 / 0
Сохранение данных на onunload
    #37648561
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rus_sunPetro123,
извините мою неопытность, а как это вместо бина вызывать JS message и что это дает?
обычная отладка программиста.
- вместо "строка не работает" - ОПЕРАТОР не работает
...
Рейтинг: 0 / 0
Сохранение данных на onunload
    #37648910
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторЯ сделал так: как показано ниже, вроде бы при изменении поля в inplaceInput должен вызываться метод save и данные сохранятся, но вызов метода не происходит. Не подскажите, что я не так делаю

<h:form>

<rich:messages >
<f:facet name="errorMarker">
<h:graphicImage value="../img/error.gif"/>
</f:facet>
</rich:messages>


<h:panelGrid columns="2">
<h:outputText value="Фамилия"/>

<rich:inplaceInput id="_secondName" value="#person.secondName}" onchange="#backBean.save()}">
<rich:ajaxValidator event="onviewactivated"/>
</rich:inplaceInput>

<h:outputText value="Имя"/>

<rich:inplaceInput id="_firstName" value="#{person.firstName}"
onchange="#{backBean.save()}" >
<rich:ajaxValidator event="onviewactivated"/>
</rich:inplaceInput>
</h:form>


Что показывает файрбаг? Запрос уходит на сервер?
...
Рейтинг: 0 / 0
Сохранение данных на onunload
    #37651529
rus_sun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
забыл ник,
подключил firebug. Ввел в поле "Фамилия" имя Сидоров, кликнул вне поля и запрос ушел.
Вот запрос post, который уходит на сервер

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
Параметры application/x-www-form-urlencoded
	
AJAXREQUEST	_viewRoot
ajaxSingle	j_id11:_secondName
j_id11	j_id11
j_id11:_firstName	
j_id11:_secondName	Сидоров
j_id11:j_id22	j_id11:j_id22
j_id11:j_id26	
j_id11_link_hidden_	j_id11:_secondName
javax.faces.ViewState	j_id4
Исходный код
AJAXREQUEST=_viewRoot&j_id11=j_id11&j_id11%3A_secondName=%D0%A1%D0%B8%D0%B4%D0%BE%D1%80%D0%BE%D0%B2&j_id11%3A_firstName=&j_id11%3Aj_id26=&javax.faces.ViewState=j_id4&j_id11_link_hidden_=j_id11%3A_secondName&j_id11%3Aj_id22=j_id11%3Aj_id22&ajaxSingle=j_id11%3A_secondName&



Вот ответ

Код: xml
1.
2.
<?xml version="1.0"?>
<html xmlns="http://www.w3.org/1999/xhtml"><head><title></title><link class="component" href="/mtt/a4j/s/3_3_3.FinalMETA-INF/skins/glassX.xcss/DATB/eAGTcz60MXT5DGkAD2IDhA__" rel="stylesheet" type="text/css" /><link class="component" href="/mtt/a4j/s/3_3_3.FinalMETA-INF/skins/glassXExt.xcss/DATB/eAGTcz60MXT5DGkAD2IDhA__" media="rich-extended-skinning" rel="stylesheet" type="text/css" /><link class="user" href="/mtt/stylesheet/theme.xcss" rel="stylesheet" type="text/css" /><link class="user" href="/mtt/stylesheet/theme.css" rel="stylesheet" type="text/css" /></head><body><dl id="j_id11:_errMessage" class="rich-messages" style="display: none; color: firebrick; font: italic;"><dt></dt></dl><meta name="Ajax-Update-Ids" content="j_id11:_errMessage" /><span id="ajax-view-state"><input type="hidden" name="javax.faces.ViewState" id="javax.faces.ViewState" value="j_id4" /></span><meta id="Ajax-Response" name="Ajax-Response" content="true" /></body></html>
...
Рейтинг: 0 / 0
Сохранение данных на onunload
    #37651596
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У тебя валидация не проходит почему-то, поэтому метод не вызывается, почему не проходит валидация - хз, смотри код
...
Рейтинг: 0 / 0
Сохранение данных на onunload
    #37651625
rus_sun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
забыл ник,
валидация работает, зато обнаружил, что rich:inplaceInput вызывает метод save() при загрузке страницы почему-то, а не при событии onchange или onblur (я всякие попробовал).
Как это побороть?
...
Рейтинг: 0 / 0
Сохранение данных на onunload
    #37651734
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Валидация то у тебя работает, но в твоем случае какое то поле изза валидации отмечается как невалидное, и поэтому жизненный цикл jsf не доходит до вызова action.

Смотри вот у тебя респонс
автор<?xml version="1.0"?>
<html xmlns=" http://www.w3.org/1999/xhtml"><head><title></title><link class="component" href="/mtt/a4j/s/3_3_3.FinalMETA-INF/skins/glassX.xcss/DATB/eAGTcz60MXT5DGkAD2IDhA__" rel="stylesheet" type="text/css" /><link class="component" href="/mtt/a4j/s/3_3_3.FinalMETA-INF/skins/glassXExt.xcss/DATB/eAGTcz60MXT5DGkAD2IDhA__" media="rich-extended-skinning" rel="stylesheet" type="text/css" /><link class="user" href="/mtt/stylesheet/theme.xcss" rel="stylesheet" type="text/css" /><link class="user" href="/mtt/stylesheet/theme.css" rel="stylesheet" type="text/css" /></head><body><dl id="j_id11:_errMessage" class="rich-messages" style="display: none; color: firebrick; font: italic;"><dt></dt></dl><meta name="Ajax-Update-Ids" content="j_id11:_errMessage" /><span id="ajax-view-state"><input type="hidden" name="javax.faces.ViewState" id="javax.faces.ViewState" value="j_id4" /></span><meta id="Ajax-Response" name="Ajax-Response" content="true" /></body></html>


У тебя в ответе приходит что надо отрисовать элемент с айди j_id11:_errMessage, ну я так полагаю это по-любому rich:messages
автор<meta name="Ajax-Update-Ids" content="j_id11:_errMessage" />
...
Рейтинг: 0 / 0
Сохранение данных на onunload
    #37651755
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати я похоже не прав, глянь http://docs.jboss.org/richfaces/latest_3_3_X/en/devguide/html/rich_ajaxValidator.html

там написано что ajaxValidator Skips all JSF processing except validation
Тебе похоже придется заменить валидатор на a4j:support
...
Рейтинг: 0 / 0
Сохранение данных на onunload
    #37654411
rus_sun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
забыл ник,
да, я так и решил проблему
Вот так работает отлично:
Код: xml
1.
2.
3.
4.
<rich:inplaceInput value="#{person.name}" >
                                <rich:ajaxValidator event="onviewactivated"/> 
                                <a4j:support event="onviewactivated" action="#{backBean.save()}"/>
                            </rich:inplaceInput>
...
Рейтинг: 0 / 0
18 сообщений из 18, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Сохранение данных на onunload
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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