重定向到jsf应用程序中的另一个页面时当前页面上的ajax错误

时间:2015-06-23 05:12:12

标签: ajax jsf redirect popup

我正在使用以下代码重定向到另一个页面,

<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错误

此消息仅发送,因为项目阶段是开发阶段且未注册其他错误侦听器”。

有没有人对为什么会这样做有任何想法?

1 个答案:

答案 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错误。

基本上有两种方法可以解决您的时间问题:

  1. <p:commandButton>action移至<p:remoteCommand>,然后完全删除<p:commandButton>onclick

  2. <p:remoteCommand>的末尾添加return false;,以阻止onclick发送自己的ajax请求。