но в браузере я получаю сообщение об ошибке "Jsf undefined".
Вы уверены, что это не опечатка с вашей стороны? Это jsf
в нижнем регистре, а не Jsf
.
В любом случае вы получите эту ошибку всякий раз, когда пытаетесь сослаться на объект jsf
до того, как будет объявлен в контексте JavaScript. Например, когда сгенерированный вывод HTML (как вы можете видеть по Просмотр источника в веб-браузере) выглядит следующим образом:
<script>jsf.ajax.addOnError(functionName);</script>
<script src="/contextname/javax.faces.resource/jsf.js.xhtml?ln=javax.faces"></script>
Вы должны убедиться, что вы ссылаетесь на него после того, как было объявлено:
<script src="/contextname/javax.faces.resource/jsf.js.xhtml?ln=javax.faces"></script>
<script>jsf.ajax.addOnError(functionName);</script>
Кроме того, вам необходимо учитывать тот факт, что JSF будет автоматически включать его только тогда, когда есть тег <f:ajax>
в другом месте в представлении. Вы можете добавить дополнительную проверку, если это так или нет:
if (typeof jsf !== 'undefined') {
jsf.ajax.addOnError(functionName);
}
В противном случае вам нужно добавить следующую строку, чтобы быть абсолютно уверенным, что JSF будет автоматически включать скрипт ajax при каждом запросе, даже если представление не содержит <f:ajax>
.
<h:outputScript library="javax.faces" name="jsf.js" target="head" />
Не связано с конкретной проблемой, если вы хотите использовать стандартные механизмы <error-page>
в web.xml
также для запросов AJAX, тогда рассмотрите возможность использования этого FullAjaxExceptionHandler
вместо.