我在我的页面上:
<h:form id="qw">
<h:panelGrid columns="3" >
<h:outputLabel for="username" value="Login:"/>
<h:inputText id="username" value="#{userManager.userName}" required="true">
<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">
<f:ajax event="blur" render="passwordMessage" />
</h:inputSecret>
<h:message id="passwordMessage" for="password" />
<h:commandButton value="#{msg.login}" action="#{userManager.login}">
<f:ajax execute="@form" render=" @form qw usernameMessage passwordMessage messages"/>
</h:commandButton>
</h:panelGrid>
</h:form>
<h:messages id="messages" globalOnly="true"/>
当我运行应用程序并单击“登录”按钮时,我收到此错误:
Error Message: Request failed with status 0 and reason
--------------------------------------------------------
Calling function:myfaces._impl.xhrCore._AjaxRequest
Error Name: httpError
这是什么意思?怎么了?我不能在Ajax中使用h:commandButton吗?
答案 0 :(得分:2)
使用JSF2时,xhtml看起来很好。您打开一个表单,使用输入字段,消息和ajaxified commandButton。您可以跳过重新渲染qw
,usernameMessage
和passwordMessage
- 它们已经是@form的一部分。
h:messages
不在表格之内,不应受到任何伤害。可能这是myFaces实现的一个特殊问题,或者你只是以某种方式丢失了连接 - JSF明智的你应该是安全的。
答案 1 :(得分:1)
在阅读L-Ray答案后,我意识到h:messages
在表单之外,因此我必须在名称:
之前添加messages
。它应该是:
<h:commandButton value="#{msg.login}" action="#{userManager.login}">
<f:ajax execute="@form" render=" @form :messages"/>
</h:commandButton>
有关它的更多信息,请阅读: http://balusc.blogspot.com/2011/09/communication-in-jsf-20.html#AjaxRenderingOfContentOutsideForm