Многие объяснения уже присутствуют, чтобы объяснить, как это происходит и как это исправить, но вы также должны следовать рекомендациям, чтобы избежать NullPointerException
вообще.
См. также: A хороший список лучших практик
Я бы добавил, очень важно, хорошо использовать модификатор final
. Использование "окончательной" модификатор, когда это применимо в Java
Сводка:
final
для обеспечения хорошей инициализации. @NotNull
и @Nullable
if("knownObject".equals(unknownObject)
valueOf()
поверх toString (). StringUtils
StringUtils.isEmpty(null)
. Одна часть загадки:
/**
* Determines if a form is dirty by comparing the current value of each element
* with its default value.
*
* @param {Form} form the form to be checked.
* @return {Boolean} <code>true</code> if the form is dirty, <code>false</code>
* otherwise.
*/
function formIsDirty(form)
{
for (var i = 0; i < form.elements.length; i++)
{
var element = form.elements[i];
var type = element.type;
if (type == "checkbox" || type == "radio")
{
if (element.checked != element.defaultChecked)
{
return true;
}
}
else if (type == "hidden" || type == "password" || type == "text" ||
type == "textarea")
{
if (element.value != element.defaultValue)
{
return true;
}
}
else if (type == "select-one" || type == "select-multiple")
{
for (var j = 0; j < element.options.length; j++)
{
if (element.options[j].selected !=
element.options[j].defaultSelected)
{
return true;
}
}
}
}
return false;
}
И другой :
window.onbeforeunload = function(e)
{
e = e || window.event;
if (formIsDirty(document.forms["someFormOfInterest"]))
{
// For IE and Firefox
if (e)
{
e.returnValue = "You have unsaved changes.";
}
// For Safari
return "You have unsaved changes.";
}
};
Оборачивают все это, и что Вы получаете?
var confirmExitIfModified = (function()
{
function formIsDirty(form)
{
// ...as above
}
return function(form, message)
{
window.onbeforeunload = function(e)
{
e = e || window.event;
if (formIsDirty(document.forms[form]))
{
// For IE and Firefox
if (e)
{
e.returnValue = message;
}
// For Safari
return message;
}
};
};
})();
confirmExitIfModified("someForm", "You have unsaved changes.");
Вы, вероятно, также захотите изменить регистрацию beforeunload
обработчик событий для использования LIBRARY_OF_CHOICE
регистрация события.
Если вы используете jQuery, вот простой прием:
$('input:text,input:checkbox,input:radio,textarea,select').one('change',function() {
$('BODY').attr('onbeforeunload',"return 'Leaving this page will cause any unsaved data to be lost.';");
});
Но просто помните, если у вас есть условие, когда вы перенаправление с этой страницы, или если вы хотите разрешить успешную публикацию формы, вам нужно сделать это до того, как перенаправить или отправить событие следующим образом:
$('BODY').removeAttr('onbeforeunload');
... или вы попадете в цикл, где он постоянно спрашивает вас
В моем случае у меня было большое приложение, и я делал location.href, перенаправлял в Javascript, а также отправлял формы, а затем некоторые AJAX-сообщения отправлялись, а затем возвращались с успешным ответом, встроенным в страницу. В любом из этих условий мне приходилось перехватывать это событие и использовать вызов removeAttr ().
Хотелось немного расширить Volomike отличный код jQuery.
Таким образом, у нас есть очень, очень крутой и элегантный механизм для достижения цели предотвращения непреднамеренной потери данных путем перехода от обновленных данных перед сохранением, т.е. обновленное поле на странице, затем нажмите кнопку, ссылку или даже кнопку «Назад» в браузере перед тем, как нажать кнопку «Сохранить».
Единственное, что вам нужно сделать, это добавить тег класса «noWarn» ко всем элементам управления (особенно Кнопки «Сохранить»), которые отправляют обратно на веб-сайт, сохраняют или не удаляют обновленные данные.
Если элемент управления приводит к потере данных на странице, т.е. выполняет переход на следующую страницу или очищает данные - ничего делать не нужно, так как скрипты автоматически покажут предупреждающее сообщение.
Замечательно! Молодец, Воломике!
Просто имейте следующий код jQuery:
$(document).ready(function() {
//----------------------------------------------------------------------
// Don't allow us to navigate away from a page on which we're changed
// values on any control without a warning message. Need to class our
// save buttons, links, etc so they can do a save without the message -
// ie. CssClass="noWarn"
//----------------------------------------------------------------------
$('input:text,input:checkbox,input:radio,textarea,select').one('change', function() {
$('BODY').attr('onbeforeunload',
"return 'Leaving this page will cause any unsaved data to be lost.';");
});
$('.noWarn').click(function() { $('BODY').removeAttr('onbeforeunload'); });
});
Как запустить процесс PHP в фоновом режиме:
#!/bin/bash
for ((i=1;i<=40;i+=1)); do
php /home/calculatedata.php &
done
Вы можете завершить все экземпляры этих фоновых процессов PHP, выдав:
killall php
Убедитесь, что у вас не запущены другие процессы PHP, так как они также будут уничтожены. Если у вас есть много других PHP процессов, то вы делаете что-то вроде:
ps -ef | grep /home/calculatedata.php | cut_the_pid | kill -9
-121--3842624- DLL ресурсов такой же, как и любые другие DLL, он просто имеет мало или нет кода в нем, и относительно больше ресурсов.
Microsoft не имеет предопределенного типа ресурсов для файлов PNG, но вы можете определить свой собственный
Самая минимальная возможная библиотека ресурсов - это только скомпилированный файл .rc, переданный компоновщику таким образом.
//save this as resources.rc (supply your own .png file)
#define RT_PNG 99
#define ID_DIGG 1
ID_DIGG RT_PNG "image\\digg.png"
Затем выполните эти команды в командной строке.
rc resources.rc
link /dll /noentry /machine:x86 resources.res
Это так. первая команда компилирует resources.rc в resources.res вторая команда превращает resources.res в dll.
Теперь у вас должна быть библиотека resources.dll
, содержащая один файл png.
На практике, конечно, необходимо поместить # defines
в файл заголовка, который используется совместно с кодом, использующим библиотеку DLL.
Чтобы использовать DLL в C++, ваш код будет выглядеть примерно так.
#define RT_PNG MAKEINTRESOURCE(99)
#define ID_DIGG MAKEINTRESOURCE(1)
HMODULE hMod = LoadLibraryEx("resources.dll", NULL, LOAD_LIBRARY_AS_DATAFILE);
if (NULL != hMod)
{
HRSRC hRes = FindResource(hMod, RT_PNG, ID_DIGG);
if (NULL != hRes)
{
HGLOBAL hgbl = LoadResource(hMod, hRes)
void * pPng = LockResource(hgbl);
UINT32 cbPng = SizeofResource(hMod, hRes);
// pPng now points to the contents of your your .png file
// and cbPng is its size in bytes
}
// Don't free the library until you are done with pPng
// FreeLibrary(hMod);
}
-121--3286629- В дополнение к ответу Лэнса я только что провел день, пытаясь запустить этот фрагмент. Во-первых, jquery 1.4, похоже, имеет ошибки с привязкой события изменения (по состоянию на 10 февраля). jQuery 1.3 - OK. Во-вторых, я не могу получить jquery, чтобы связать onbeforeunload/beforeunload (я подозреваю, IE7, что я использую). Я пробовал разные селекторы, («тело»), (окно). Я пытался «.bind,» «.attr.» Возврат к чистой js работал (я также видел несколько похожих сообщений на SO об этой проблеме):
$(document).ready(function() {
$(":input").one("change", function() {
window.onbeforeunload = function() { return 'You will lose data changes.'; }
});
$('.noWarn').click(function() { window.onbeforeunload = null; });
});
Примечание. Я также использовал селектор ': input' вместо перечисления всех типов ввода. Строго перебор, но я думал, что это круто: -)
Я сделал еще одно небольшое улучшение в реализации jQuery, перечисленных на этой странице. Моя реализация будет работать, если у вас включена валидация страницы ASP.NET на стороне клиента и используется на странице.
Она позволяет избежать "ошибки" очистки функции onBeforeLeave
, когда страница на самом деле не публикуется по щелчку из-за ошибки валидации. Просто используйте класс no-warn-validate
для кнопок/ссылки, которые вызывают валидацию. У него все еще есть класс no-warn
для использования в элементах управления, у которых CausesValidation=false
(например, кнопка "Сохранить как черновик"). Этот шаблон, вероятно, можно использовать и для других фреймворков валидации, отличных от ASP.NET, поэтому я размещаю его здесь для справки.
function removeCheck() { window.onbeforeunload = null; }
$(document).ready(function() {
//-----------------------------------------------------------------------------------------
// Don't allow navigating away from page if changes to form are made. Save buttons, links,
// etc, can be given "no-warn" or "no-warn-validate" css class to prevent warning on submit.
// "no-warn-validate" inputs/links will only remove warning after successful validation
//-----------------------------------------------------------------------------------------
$(':input').one('change', function() {
window.onbeforeunload = function() {
return 'Leaving this page will cause edits to be lost.';
}
});
$('.no-warn-validate').click(function() {
if (Page_ClientValidate == null || Page_ClientValidate()) { removeCheck(); }
});
$('.no-warn').click(function() { removeCheck() });
});
Я создал плагин jQuery , который можно использовать для реализации предупреждения о несохраненных изменениях. функция для веб-приложений. Он поддерживает обратные передачи. Он также включает ссылку на информацию о том, как нормализовать поведение события onbeforeunload
Internet Explorer.