2012-03-20 155 views
0

我已经在我们的xhtml文件中编写了下面的代码,用于重定向到ajax调用的错误页面,我已经将它写入了常用页面。JSF 2.0 Ajax异常处理

var onError = function onError() { 
window.location = 'http://' + jQuery(location).attr('host')+'/saec/app/error';//saec/app/error };jsf.ajax.addOnError(onError); 

它工作正常,但在浏览器中得到错误为“Jsf undefined”。

我已经包括

h:outputScript name="jsf.js" library="javax.faces" target="head" 

也,但其给出了同样的错误尝试。

任何一个可以请告诉我在哪里,我做了错误

回答

2

但在浏览器正在错误的“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代替。