我正在使用以下代码重定向到另一个页面,
<p:commandButton value="myRedirectButton" value="#{myBean.val}" rendered="#{myBean.renderThis}"
onclick="remoteRedirect();"/>
<p:remoteCommand name="remoteRedirect" actionListener="#{myBean.redirectToPage}"/>
java中的actionListener如下:
public static void redirectToPage(String url){
FacesContext ctx= FacesContext.getCurrentInstance();
ExternalContext ext=ctx.getExternalContext();
String encodedUrl=ext.encodeRedirectUrl(ctx.getApplication().
getViewHandler.getActionUrl(ctx,url),
new HashMap<String,List<String>>());
ext.redirect(encodedUrl);
}
点击'myRedirectButton'后,页面重定向前会弹出一个js错误
“此消息仅发送,因为项目阶段是开发阶段且未注册其他错误侦听器”。
有没有人对为什么会这样做有任何想法?
答案 0 :(得分:0)
此消息仅发送,因为项目阶段是开发,没有注册其他错误侦听器
当您使用MyFaces并且javax.faces.PROJECT_STAGE
设置为Development
中的web.xml
并且您没有jsf.ajax.addOnError
时,会显示此信息监听器,当前请求是一个Ajax请求,并且JS代码在该请求期间抛出了错误。
基本上,它只是试图告诉您应该在JS控制台中查看实际错误,和/或您应该配置jsf.ajax.addOnError
以获得更细粒度的JS错误处理。一旦掌握了实际JS错误的详细信息,您就可以轻松地了解原因并解决问题。
关于具体问题,您基本上是在点击<p:commandButton>
时同时发送多个ajax请求,第一个是通过<p:remoteCommand>
发送,然后是第二个通过{{1} }}。第一个将执行重定向,因此在处理响应之前意外中止第二个,从而导致JS错误。
基本上有两种方法可以解决您的时间问题:
将<p:commandButton>
从action
移至<p:remoteCommand>
,然后完全删除<p:commandButton>
和onclick
。
在<p:remoteCommand>
的末尾添加return false;
,以阻止onclick
发送自己的ajax请求。