Как убедиться, что функция Javascript вызывается после КАЖДОЙ обратной передачи в Liferay/ICEFaces?

У меня очень мало опыта работы с Liferay и ICEFaces. Мне нужно создать портлет, который вызывает определенную функцию Javascript каждый раз, когда происходит обратная передача.

На самом деле, когда форма отправляется через AJAX, появляется экран загрузки и блокирует экран. Когда обратная передача завершается, мне нужно вынуть ее и снова передать управление пользователю.

Я попытался поместить фрагмент <script> в тело портлета, и он успешно выполняется при первой загрузке страницы (все в порядке), а также когда обратная передача изменяет HTML-содержимое страницы.

Проблема в том, что когда сервер не изменяет HTML (т.е. поиск возвращается без результата, вы снова ищете и все еще не получаете результатов), функция не выполняется снова.

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

Вы можете помочь мне с этим?


person usr-local-ΕΨΗΕΛΩΝ    schedule 07.04.2011    source источник


Ответы (2)


Вы пробовали следующее:

<script>
    Ice.onSendReceive('document:body',
        function(){/*Before send ajax request*/},
        function(){/*After receive the response*/}
    );
</script>

Но это решение применялось для каждого сделанного вами запроса ajax, надеюсь, это поможет вам.

person Saeed    schedule 10.04.2011
comment
Предположим, что другой код где-то использует эту функцию (проект большой, я не контролирую весь код), выполняет новый вызов Ice.onSendReceive для обратных вызовов append или overwrite ? Я уже был вынужден реализовать добавление обратных вызовов для другой функции, потому что мои портлеты не знают, используют ли другие портлеты те же функции, и могут возникнуть конфликты. - person usr-local-ΕΨΗΕΛΩΝ; 10.04.2011

Я сделал это, используя странный трюк со случайными числами, которыми хочу поделиться.

Во-первых, в свойстве поддерживающего компонента я создал метод

public String getLoadFunction()
{
    return "functionName("+ new Random().nextDouble() +");";
}

а потом

<script>
    #{MyViewBean.loadFunction}
</script>

«Просто», ICEFaces настолько умен, что проверяет, был ли изменен HTML или нет, при обработке запросов AJAX. Этот трюк очень похож на добавление случайного числа к URL-адресам HTTP, чтобы избежать кешей.

person usr-local-ΕΨΗΕΛΩΝ    schedule 07.04.2011