2013-03-12 2 views
0

Я использую Java Server Faces, JQuery и JavaScript. Я думаю, что обнаружил ошибку в Firefox. код Этот JavaScript сработал:Ошибка Firefox с версии 18

var list = jQuery('input.myclass'); 
var item = list.eq(0); 
item.click(); 
top.location.reload(true); 

Клик будет ударил a4j: CommandButton, который связан с моим остросюжетного методом «mybean.myaction()». Если я использую Firefox 19 или Firefox 18, можно нажать кнопку. Во всяком случае, перезагрузка страницы происходит слишком быстро. Я вижу это, устанавливая точку останова Eclipse в mybean.myaction() - точка останова никогда не достигалась.

Если я использую Firefox 17, InternetExplorer работает, как и ожидалось, запускается Javascript, происходит щелчок, bean-method настраивает состояние компонента и перезагружается страница.

Заранее благодарим за разъяснение причины такого поведения. В случае необходимости я напишу ошибку в Firefox bugzilla.

UPDATE: это a4j: commandButton, на который щелкнул JQuery;

<a4j:commandButton action="#{mybean.myaction}" value="setMyVal" styleClass="hidden myclass"> 
    <a4j:actionparam name="myparamname" value="MY_VAL" assignTo="#{mybean.myattr}" /></a4j:commandButton> 

UPDATE-2: Я играл, чтобы изолировать проблему. Я поместил инструкцию try-catch вокруг блока, и, кроме того, я заменил reload(), чтобы я смог следить за выполнением javascript. Теперь я вижу, что если я вхожу в top.location.host, я перейду к блокировке catch, но мой errorText будет «undefinded». Как это может произойти? Что мне нужно сделать, чтобы узнать больше об этом исключении?

try{ ... 
    item.click(); 
    // Firefox-Bug in Version ab 18.0.1 
    var res = top.location.host; //top.location.reload(true); 
} catch (e) { 
    var errorText = e.message; // errorText is undefined! 
    alert("Exception: " + errorText); 
} 

ДОПОЛНЕНО-3: она становится чужим и странником ... если я установить Firebug-Breakpoint между item.click() и top.location.reload (правда); все прошло хорошо! Из-за этого, возможно, проблема заключается в a4j. Может быть, разумно уйти на сегодня. Спасибо за вашу помощь до сих пор!

+0

Данный код выглядит хорошо. Я думаю, что обработчик событий имеет некоторое асинхронное поведение, которое вызывает проблемы. Можете ли вы показать нам, что происходит, когда элемент нажат? –

+1

Кажется, вы используете Richfaces здесь. Он поставляется с собственной встроенной версией jQuery. Какую версию Richfaces вы используете? – dcernahoschi

+0

Я использую RichFaces 3.3.x, наверняка это довольно старый, но JQuery.click() должен работать (и отлично работает во всех других областях нашего приложения). Я думаю, проблема в том, что перезагрузка страницы происходит слишком рано. Более того, я не вижу ошибки Javascript в моей консоли Firebug. – Jochen

ответ

2

Это не совсем ответ на вопрос, а предложение о том, как решить проблему. Таким образом, вы можете перезагрузить страницу после завершения действия, используя OnComplete атрибут CommandButton:

<a4j:commandButton action="#{mybean.myaction}" value="setMyVal" styleClass="hidden myclass" oncomplete="top.location.reload(true);"> 
    <a4j:actionparam name="myparamname" value="MY_VAL" assignTo="#{mybean.myattr}" /> 
</a4j:commandButton> 

Таким образом, вы сериализовать события: первый действие называется, и только после того, как страница перезагружается. Конечно, вам нужно удалить top.location.reload(true); с вашего javascript-кода.

EDIT: Думая о проблемах ... и мне кажется, что это не ошибка. Firefox не требуется нигде ждать, пока на сервере не будет обработано событие click (сложная операция в случае Richfaces). Он отправляет событие click в javascript Richfaces и переходит к следующему утверждению: top.location.reload(true);. Вам нужно предотвратить эту проблему.

+0

После моих последних тестов, чтобы изолировать проблему (обновление-2), я подозреваю, что причиной является проблема top.location. – Jochen

+0

Спасибо dcernahoschi, ваш ответ решил проблему. – Jochen

Смежные вопросы