2013-12-04 2 views
1

Я использую JSF 2 с богатыми интерфейсами 4.x. Я создал форму входа, которая находится во всплывающем окне. Всплывающее окно не отправляет и не возвращает ошибки должным образом, и не позволяет мне войти в систему.Всплывающая панель, не отображающая ошибки/отправку

Вот мой Логин Всплывающий:

Before login attempt

 <rich:popupPanel id="loginPopup"> 
      <h:form id="login" class="compact-form clearfix"> 
       <h1>Access your Account</h1> 
       <fieldset id="inputs"> 
        <h:outputLabel value="Username:" for="username"/><br/> 
        <h:inputText id="username" value="#{viewLogin.loginName}" required="true" requiredMessage="Please enter your username"> 
         <f:validateLength maximum="20" minimum="3" /> 
        </h:inputText> 
        <a4j:outputPanel ajaxRendered="true"> 
         <h:message for="username" /> 
        </a4j:outputPanel> 

        <h:outputLabel value="Password:" for="password"/><br/> 
        <h:inputSecret id="password" value="#{viewLogin.password}" required="true" requiredMessage="Enter your password"> 
         <f:validator validatorId="LoginValidator" /> 
         <f:validateLength maximum="20" minimum="5" /> 
        </h:inputSecret> 
        <a4j:outputPanel ajaxRendered="true"> 
         <h:message for="password" /> 
        </a4j:outputPanel> 
       </fieldset> 
       <fieldset id="actions"> 
        <a4j:commandButton value="Submit" id="submit" action="#{viewLogin.login()}" immediate="false" 
          execute="username password @this" 
          render="username password" oncomplete="if (#{facesContext.maximumSeverity == null}) {#{rich:component('loginPopup')}.hide();}"/> 
        <h:commandButton value="Cancel"> 
         <rich:componentControl operation="hide" target="loginPopup"/> 
        </h:commandButton> 
        <h:link value="Forgot password?" outcome="forgotpassword"/> 
        <h:link value="Forgot username?" outcome="forgotusername"/> 
        <h:link value="Create account" outcome="createuser"/> 
       </fieldset> 
      </h:form> 
     </rich:popupPanel> 

Теперь, когда я нажимаю кнопку отправки в час: стили inputSecret переоденутся вокруг и поле не Логин ввода введите пароль и покажет мой пароль.

after submit

Почему мой Логин не подчиняющийся для проверки/рендеринга ошибок?

Примечание: форма работает без всплывающих окон и тегов a4j.

+0

Кроме того, для целей тестирования, добавьте общие богатый:. сообщения/час: сообщения, чтобы проверить, если что-то еще т здесь он жалуется - не забудьте позволить, что переизбрали .. –

ответ

1

Я просто дважды проверили ваш исходный код в РФ 4.3.3.Final, просто удаляя LoginValidator вы используете, но не было предусмотрено:

<rich:popupPanel id="loginPopup" show="true"> 
    <h:form id="login" class="compact-form clearfix"> 
     <h1>Access your Account</h1> 
     <fieldset id="inputs"> 
      <h:outputLabel value="Username:" for="username"/><br/> 
      <h:inputText id="username" value="#{viewLogin.loginName}" required="true" requiredMessage="Please enter your username"> 
       <f:validateLength maximum="20" minimum="3" /> 
      </h:inputText> 
      <a4j:outputPanel ajaxRendered="true"> 
       <h:message for="username" /> 
      </a4j:outputPanel> 
      <h:outputLabel value="Password:" for="password"/><br/> 
      <h:inputSecret id="password" value="#{viewLogin.password}" required="true" requiredMessage="Enter your password"> 
       <f:validateLength maximum="20" minimum="5" /> 
      </h:inputSecret> 
      <a4j:outputPanel ajaxRendered="true"> 
       <h:message for="password" /> 
      </a4j:outputPanel> 
     </fieldset> 
     <fieldset id="actions"> 
      <a4j:commandButton value="Submit" id="submit" action="#{viewLogin.login()}" immediate="false" 
        execute="username password @this" 
        render="username password" oncomplete="if (#{facesContext.maximumSeverity == null}) {#{rich:component('loginPopup')}.hide();}"/> 
      <h:commandButton value="Cancel"> 
       <rich:componentControl operation="hide" target="loginPopup"/> 
      </h:commandButton> 
     </fieldset> 
    </h:form> 
</rich:popupPanel> 

с свернутом Seam 2.1.3.CR1 впрыскивается Бин

import org.jboss.seam.annotations.Name; 

@Name("viewLogin") 
public class TestBean { 

private String loginName; 
private String password; 

public String getPassword() { 
    return password; 
} 
public void setPassword(String password) { 
    this.password = password; 
} 
public String getLoginName() { 
    return loginName; 
} 
public void setLoginName(String loginName) { 
    this.loginName = loginName; 
} 

public String login() { 
    System.out.println("Login called"); 
    return ""; 
} 
} 

и inputSecret Поле остается в тайне. Мое предложение было бы

  • добавить глобальный h:messages (должно быть rerendered с помощью кнопки мыши) или глобальная rich:messages для проверки других возможных причин.
  • также перепроверить LoginValidator-Bean для любых возможных проблем
  • быть уверены, что нет другого PhaseListener/JavaScript активно изменения DOM

Иногда popupPanel показывает странное поведение в сочетании с формами (будучи вложенное . формы можно модифицировать DOM элемент крепления с помощью атрибута domElementAttachment

Надеется, что это помогает ...

Смежные вопросы