2015-06-18 3 views
-1

У меня есть p: commandButton в простой форме входа. Действие не стреляет. Я проверил, что контроллер и функция существуют, проверены на вложенные формы f: заключены все в f: view, удалены требования проверки, но действие не срабатывает.p: commandButton не вызывает действие

Слушатель действий просто устанавливает флаг входа, а затем страница обновляется с новым рендерингом. Если я напрямую ссылаюсь на функцию слушателя, она запускается, но не из commandButton.

Вот контроллер боб:

@ManagedBean(name = "uiController") 
@SessionScoped 
public class UiController implements Serializable { 

private Boolean isLoggedIn; 
private String userName; 
private String password; 

public UiController() { 
    isLoggedIn = false; 
} 

public String getUserName() { 
    return userName; 
} 

public void setUserName(String userName) { 
    this.userName = userName; 
} 

public String getPassword() { 
    return password; 
} 

public void setPassword(String password) { 
    this.password = password; 
} 

public Boolean getIsLoggedIn() { 
    return isLoggedIn; 
} 

public String getLoginLogoTopLine() { 
    return "Yoyodyne"; 
} 

public String getLoginLogoBottomLine() { 
    return "Corporation"; 
} 

public void login() { 
    isLoggedIn = true; 
} 

} 

Вот HTML:

<h:head> 
    <h:outputStylesheet library="css" name="jsfcrud.css"/> 
    <h:outputStylesheet library="css" name="transend-ui.css"/> 
    <h:outputScript library="js" name="jsfcrud.js"/> 
</h:head> 
<h:body id="enchilada"> 
    <f:view> 
     <p:growl id="growl" life="3000" /> 
     <h:panelGroup id="loginContainer" styleClass="ts-page-container ts-login-container" rendered="#{!uiController.isLoggedIn}"> 
      <h:panelGroup styleClass="ts-northwest-container"> 
       <h:outputText value="#{uiController.loginLogoTopLine}" styleClass="ts-login-logo-top" /> 
       <h:outputText value="#{uiController.loginLogoBottomLine}" styleClass="ts-login-logo-bottom" /> 
      </h:panelGroup> 
      <h:panelGroup styleClass="ts-centered-container"> 

       <h:form id="LoginForm"> 
        <h:inputHidden value="#{shipperCode}" /> 
        <p:panelGrid styleClass="ts-login-panel"> 
         <p:row> 
          <p:column styleClass=""> 
           <p:panelGrid styleClass=""> 
            <p:row> 
             <p:column> 
              <p:outputLabel styleClass="ts-login-prompt" value="#{bundle.LoginLabel_userName}" for="userName" /> 
             </p:column> 
             <p:column> 
              <p:inputText value="#{uiController.userName}" id="userName" title="#{bundle.LoginTitle_userName}"/> 
             </p:column> 
            </p:row> 
            <p:row> 
             <p:column> 
              <p:outputLabel styleClass="ts-login-prompt" value="#{bundle.LoginLabel_password}" for="password" /> 
             </p:column> 
             <p:column> 
              <p:inputText value="#{uiController.password}" id="password" title="#{bundle.LoginTitle_password}"/> 
             </p:column> 
            </p:row> 
           </p:panelGrid> 

          </p:column> 
          <p:column> 
           <p:commandButton action="#{uiController.login}" value="login" oncomplete="window.location.replace(window.location.href);"/> 
          </p:column> 
         </p:row> 
        </p:panelGrid> 
       </h:form> 
       <h:messages /> 
      </h:panelGroup> 
     </h:panelGroup> 
     <h:panelGroup id="mainContainer" styleClass="ts-page-container ts-main-container" rendered="#{uiController.isLoggedIn}"> 
     </h:panelGroup> 
    </f:view> 
</h:body> 

UPDATE

ОК извините за размещение фрагментов в комментариях. Я обычно работаю для себя. Это первый раз, когда я должен был просить о помощи, и я не знаком с публикацией. Не новобраб на Java, определенно новый.

Вот что у меня теперь есть для HTML:

<html xmlns="http://www.w3.org/1999/xhtml" 
     xmlns:ui="http://xmlns.jcp.org/jsf/facelets" 
     xmlns:h="http://xmlns.jcp.org/jsf/html" 
     xmlns:f="http://xmlns.jcp.org/jsf/core" 
     xmlns:p="http://primefaces.org/ui"> 
    <h:head> 
    </h:head> 
    <h:body id="enchilada"> 
     <f:view> 
      <h:form id="LoginForm"> 
       <p:commandButton action="#{uiController.login}" value="login"/> 
      </h:form> 
     </f:view> 
    </h:body> 

</html> 

Вот боб:

@ManagedBean(name = "uiController") 
    @SessionScoped 
    public class UiController implements Serializable { 

    public void login() { 
     System.out.println("login invoked"); 
    } 
} 
+1

Люди хотят [MCVE] (https://stackoverflow.com/help/mcve). Для такого простого примера я ожидаю увидеть, что вы протестировали одну командную кнопку в одной форме с одним бэкбоном с помощью одного метода. Если вы не можете воссоздать проблему в простом примере, то постепенно добавляйте свои изменения, пока не сможете, и, скорее всего, вы ответите на свой вопрос. – DavidS

+0

У меня есть командные кнопки, работающие во многих других местах. Это довольно просто. Я раздели все, кроме двух полей и одного действия. В одной форме есть один commandButton. Бэк-бэк - это только геттеры/сеттеры и функция входа. Мне что-то не хватает. –

+0

Если вы лишили «все остальное», и он все еще не работает, вы не убрали достаточно. _Something_ вызывает сбой. Вы должны быть в состоянии изолировать его от «если я делаю это одно, это терпит неудачу». – DavidS

ответ

0

Там может быть проблема с объявления пространства имен. Вы использовали:

<html xmlns="http://www.w3.org/1999/xhtml" 
     xmlns:ui="http://xmlns.jcp.org/jsf/facelets" 
     xmlns:h="http://xmlns.jcp.org/jsf/html" 
     xmlns:f="http://xmlns.jcp.org/jsf/core" 
     xmlns:p="http://primefaces.org/ui"> 

Заменить выше:

<html xmlns="http://www.w3.org/1999/xhtml" 
     xmlns:h="http://java.sun.com/jsf/html" 
     xmlns:p="http://primefaces.org/ui" 
     xmlns:f="http://java.sun.com/jsf/core"> 

Честно говоря, я не знаком с тем, как работают эти объявления пространства имен, так что я не знаю, если и почему это будет Сделать разницу. Я бы поставил это в комментарии, но он слишком длинный.

+0

Не имеет значения. Мне просто нужно отойти от этого какое-то время, затем сделайте это. –

+0

Это странно. Для меня это имеет значение, но, как я уже сказал, я не совсем уверен, как работают пространства имен, поэтому я не удивлюсь, что это не решило вашу проблему. Я оставлю свой ответ здесь для доказательства. – DavidS

+0

@ LokiSmokes: «... отступите от этого на некоторое время, затем сделайте это». Это хорошая идея, но просто подчеркнуть, что в основном вы создаете MCVE: вы начинаете с нуля и воспроизводите проблему. – DavidS

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