我在实现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请求运行,我得到同样的错误
错误是什么意思?有什么问题?
修改
我现在再次运行我的应用程序,我没有收到任何错误消息。为什么我有时只会收到此错误?
答案 0 :(得分:3)
这是混合AJAX和“常规”请求的结果。当按钮被击中时,两个请求并行运行:一个 - 模糊验证的AJAX请求,以及commandButton的第二个表单提交。 当AJAX请求完成时,JSF会检测到它,并将其报告为潜在问题(例如,如果两个请求都在服务器端执行某些相互依赖的操作)。
在你的情况下解决它的最简单的方法是让按钮执行AJAX请求(将f:ajax
添加到h:commandButton
),然后JSF将请求放入队列,这将保证请求是连续但不同时发出的。