ошибка с h: commandButton и ajax

У меня на странице:

<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

Что это значит? Что случилось? Я не могу использовать h:commandButton с Ajax?


person kuba44    schedule 28.11.2013    source источник


Ответы (2)


xhtml выглядит нормально при использовании JSF2. Вы открываете форму, используете поля ввода, сообщение и ajaxified commandButton. Вы можете пропустить повторную визуализацию qw, usernameMessage и passwordMessage — они уже являются частью @form.

h:messages находится вне формы, что не должно быть от какого-либо вреда. Возможно, это особая проблема с реализацией myFaces или вы просто каким-то образом потеряли соединение - с точки зрения JSF вы должны быть в безопасности.

person L-Ray    schedule 28.11.2013

Прочитав ответ 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

person kuba44    schedule 29.11.2013
comment
Так почему же вы просто не приняли ответ L-Ray, если он сработал для вас? - person kolossus; 29.11.2013