这个奇怪的httpError是什么意思?

时间:2013-11-30 15:36:20

标签: ajax http jsf jsf-2 xmlhttprequest

我在实现MyFaces 2.0中使用JSF 我有2个jsf页面login.xhtml和register.xhtml。

login.xhtml:

<?xml version='1.0' encoding='UTF-8' ?> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
  xmlns:ui="http://java.sun.com/jsf/facelets"
  xmlns:h="http://java.sun.com/jsf/html"
  xmlns:f="http://java.sun.com/jsf/core">

 <h:head>
     <title>System CollDoc</title>
 </h:head>
 <h:body>
    <h:form>
       <h:panelGrid columns="3" >
             <h:outputLabel for="username" value="Login:"/>
             <h:inputText id="username" value="#{userManager.userName}" required="true" requiredMessage="#{msg.requiredLoginMsg}">
                  <f:ajax event="blur" render="usernameMessage"/>
             </h:inputText>
             <h:message id="usernameMessage" for="username" />

             <h:outputLabel for="password" value="#{msg.password}"/>
             <h:inputSecret id="password" value="#{userManager.password}" required="true" requiredMessage="#{msg.requiredPassMsg}">
                  <f:ajax event="blur" render="passwordMessage" />
             </h:inputSecret>
             <h:message id="passwordMessage" for="password" />

             <h:commandButton value="#{msg.login}" action="#{userManager.login}"/>
       </h:panelGrid>
     </h:form>

     <h:messages id="messages" globalOnly="true"/>

     <h:link value="#{msg.register}" outcome="register.xhtml"/>
 </h:body>
</html>

register.xhtml:

<?xml version='1.0' encoding='UTF-8' ?> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
  xmlns:ui="http://java.sun.com/jsf/facelets"
  xmlns:h="http://java.sun.com/jsf/html"
  xmlns:f="http://java.sun.com/jsf/core">

 <h:head>
     <title>System CollDoc</title>
 </h:head>
 <h:body>
    <h:form>
       <h:panelGrid columns="3" >
          <h:outputLabel for="login" value="Login:"/>
          <h:inputText id="login" value="#{registerBacking.registerLog}" required="true" requiredMessage="#{msg.requiredLoginMsg}">
            <f:ajax event="blur" render="usernameMessage"/>
       </h:inputText>
       <h:message id="usernameMessage" for="login"/>

       <h:outputLabel for="pass" value="#{msg.password}"/>
       <h:inputSecret id="pass" value="#{registerBacking.registerPass}" required="true" requiredMessage="#{msg.requiredPassMsg}">
            <f:ajax event="blur" render="passwordMessage" />
       </h:inputSecret>
       <h:message id="passwordMessage" for="pass" />

       <h:commandButton value="#{msg.login}" action="#{registerBacking.register}"/>

     </h:panelGrid> 
   </h:form>

   <h:link class="link" value="#{msg.returnTxt}" outcome="/pages/login.xhtml"/>

 </h:body>
</html>

我运行我的应用程序,首先我看到login.xhtml页面。我首先点击inputText“username”,然后点击inputSecret“password”(验证“用户名”由模糊的ajax请求运行),接下来是注册页面的链接(“密码”的验证由模糊的ajax请求运行)然后我得到错误对话:

Error Message: Request failed with status 0 and reason 

--------------------------------------------------------
Calling function:myfaces._impl.xhrCore._AjaxRequest
Error Name: httpError
--------------------------------------------------------
Note, this message is only sent, because project stage is development and no other error listeners are registered.

我点击“确定”按钮,然后在我的网络浏览器中输入register.xhtml页面。在注册页面情况相同:我点击inputText“登录”,然后点击inputSecret“pass”(验证“登录”由模糊的ajax请求运行)接下来我点击链接返回登录页面或按钮运行业务逻辑( “pass”的验证由模糊的ajax请求运行,我得到同样的错误

错误是什么意思?有什么问题?


修改

我现在再次运行我的应用程序,我没有收到任何错误消息。为什么我有时只会收到此错误?

1 个答案:

答案 0 :(得分:3)

这是混合AJAX和“常规”请求的结果。当按钮被击中时,两个请求并行运行:一个 - 模糊验证的AJAX请求,以及commandButton的第二个表单提交。 当AJAX请求完成时,JSF会检测到它,并将其报告为潜在问题(例如,如果两个请求都在服务器端执行某些相互依赖的操作)。

在你的情况下解决它的最简单的方法是让按钮执行AJAX请求(将f:ajax添加到h:commandButton),然后JSF将请求放入队列,这将保证请求是连续但不同时发出的。