Как я могу запустить некоторый JavaScript после того, как панель обновления обновится?

Read весь текст из файла

Java 11 добавил readString () метод для чтения маленьких файлов как String, сохранив разделители строки:

String content = Files.readString(path, StandardCharsets.US_ASCII);

Для версий между Java 7 и 11, вот компактная, устойчивая идиома, обернутая в служебном методе:

static String readFile(String path, Charset encoding) 
  throws IOException 
{
  byte[] encoded = Files.readAllBytes(Paths.get(path));
  return new String(encoded, encoding);
}

строки Read текста из файла

Java 7 добавили удобный метод считать файл как строки текста, представленный как List. Этот подход "с потерями", потому что разделители строки разделяются от конца каждой строки.

List lines = Files.readAllLines(Paths.get(path), encoding);

Java 8 добавил Files.lines() метод для создания Stream. Снова, этот метод с потерями, потому что разделители строки разделяются. Если IOException встречен при чтении файла, он обертывается в UncheckedIOException , так как Stream не принимает лямбды тот бросок контролируемые исключительные ситуации.

try (Stream lines = Files.lines(path, encoding)) {
  lines.forEach(System.out::println);
}

Этому Stream действительно нужно close() вызов; это плохо документируется на API, и я подозреваю, что многие люди не делают даже уведомление Stream имеет close() метод. Обязательно используйте блок ARM как показано.

, Если Вы работаете с источником кроме файла, можно использовать lines() метод в [1 118] вместо этого.

Использование памяти

первый метод, который сохраняет разрывы строки, может временно несколько раз требовать памяти размер файла, потому что в течение короткого времени необработанное содержание файла (массив байтов), и декодируемые символы (каждый из которых составляет 16 битов, даже если закодированный как 8 битов в файле) находится в памяти сразу. Является самым безопасным относиться к файлам, которые Вы знаете, чтобы быть маленькими относительно доступной памяти.

второй метод, читая строки, обычно является большей эффективной памятью, потому что входной буфер байта для декодирования не должен содержать весь файл. Однако это все еще не подходит для файлов, которые являются очень большими относительно доступной памяти.

Для чтения больших файлов, Вам нужен различный дизайн для Вашей программы, та, которая читает блок текста от потока, обрабатывает его, и затем идет дальше к следующему, снова используя тот же блок памяти фиксированного размера. Здесь, "большой" зависит от компьютерных спецификаций. В наше время этот порог мог бы быть многими гигабайтами RAM. Третий метод, с помощью Stream является одним способом сделать это, если вход "записи", оказывается, отдельные строки. (Используя readLine() метод BufferedReader является процедурным эквивалентом этому подходу.)

Кодировка символов

Одной вещью, которая отсутствует в образце в исходном сообщении, является кодировка символов. Существуют некоторые особые случаи, где значение по умолчанию платформы - то, что Вы хотите, но они редки, и необходимо быть в состоянии, выравнивают по ширине выбор.

StandardCharsets класс определяют некоторые константы для кодировки, требуемой всех Сред выполнения Java:

String content = readFile("test.txt", StandardCharsets.UTF_8);

значение по умолчанию платформы доступно от [1 131] Charset сам класс :

String content = readFile("test.txt", Charset.defaultCharset());

Примечание: Этот ответ в основном заменяет мою версию Java 6. Утилита Java 7 безопасно упрощает код, и старый ответ, который использовал отображенный буфер байта, предотвратил файл, который был считан из того, чтобы быть удаленным, пока отображенный буфер не был собран "мусор". Можно просмотреть старую версию по "отредактированной" ссылке на этот ответ.

57
задан womp 27 July 2009 в 21:01
поделиться

3 ответа

Добавление обработчика add_pageLoaded также может работать.

Sys.WebForms.PageRequestManager.getInstance().add_pageLoaded(PageLoadedHandler);

Примечание: обработчик будет запускаться для любого обратного вызова, но вы можете использовать sender._postBackSettings.panelID для фильтрации, когда вы хотите, чтобы ваша функция вызывалась.

Дополнительные примеры:

44
ответ дан 24 November 2019 в 19:15
поделиться

Во время обратной передачи для панели обновлений в коде сервера используйте ClientScriptManager, чтобы добавить новый скрипт на страницу, примерно так:

ClientScriptManager.RegisterStartupScript(
       typeof(page1), 
       "CssFix", 
       "javascriptFunctionName()", 
        true);

Инкапсулируйте свой javascript в названной функции, которая соответствует там третий аргумент, и он должен выполняться при возврате обратной передачи.

14
ответ дан 24 November 2019 в 19:15
поделиться

Вы также можете выполнить привязку к событию в коде на стороне клиента (JavaScript) каждый раз, когда UpdatePanel завершается следующим образом:

        Sys.WebForms.PageRequestManager.getInstance().add_endRequest(function(){myFunction();});

Итак, в этом случае myFunction (); будет вызываться каждый раз, когда происходит обратная передача UpdatePanel. Если вы выполните этот код при загрузке страницы, функция будет вызываться в правильное время.

12
ответ дан 24 November 2019 в 19:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: