2014-10-28 5 views
1

У меня есть следующий код в login.xhtml:Почему commandButton actionListener не работает?

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

<h:head><title>Login</title></h:head> 
<h:body> 
    <h:form> 
     <p:commandButton id="loginBtn" value="Login" type="submit" actionListener="#{userMB.login}"/> 
    </h:form> 
</h:body> 
</html> 

И у меня есть у меня есть следующий компонент:

@ManagedBean(name="userMB") 
@RequestScoped 
public class UsersManagedBean implements Serializable { 
    public void login(ActionEvent event) { 
     System.out.println("print here..."); 
    } 
} 

я не получаю сообщение распечатана, так как метод login() не было вызывается. Что-то не так?

Файл web.xml является:

<?xml version="1.0" encoding="UTF-8"?> 
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns="http://java.sun.com/xml/ns/javaee" 
    xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 
    id="WebApp_ID" 
    version="2.5">  
<context-param> 
    <param-name>javax.faces.STATE_SAVING_METHOD</param-name> 
    <param-value>client</param-value> 
</context-param> 
<servlet> 
    <servlet-name>Faces Servlet</servlet-name> 
    <servlet-class>javax.faces.webapp.FacesServlet</servlet-class> 
    <load-on-startup>1</load-on-startup> 
    </servlet> 
<servlet-mapping> 
    <servlet-name>Faces Servlet</servlet-name> 
    <url-pattern> *.xhtml</url-pattern> 
    </servlet-mapping> 
</web-app> 
+0

Вы разместили p: commandButton внутри h: form? Пожалуйста, покажите свой код login.xhtml. – wittakarn

ответ

1

Убедитесь, что вы используете javax.faces.event.ActionEvent.

XHTML

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

    <h:head><title>Login</title></h:head> 
    <h:body> 
     <h:form> 
      <p:commandButton id="loginBtn" 
          value="Login" 
          type="submit" 
          actionListener="#{userMB.login}"/> 
     </h:form> 
    </h:body> 
</html> 

managedbean

import java.io.Serializable; 
import javax.faces.bean.ManagedBean; 
import javax.faces.bean.RequestScoped; 
import javax.faces.event.ActionEvent; 

@ManagedBean(name = "userMB") 
@RequestScoped 
public class UsersManagedBean implements Serializable { 

    public void login(ActionEvent event) { 
     System.out.println("print here..."); 
    } 
} 
+0

У меня все еще проблема не решена. – user3377708

+0

@ user3377708 показать свой web.xml. – wittakarn

+0

зачем объявлять метод входа с параметром 'ActionEvent event'? он также должен работать без параметров. –

1

Попробуйте это после удаления type="submit"

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

<h:head><title>Login</title></h:head> 
<h:body> 
    <h:form> 
     <p:commandButton id="loginBtn" value="Login" action="#{userMB.login}"/> 
    </h:form> 
</h:body> 
</html> 

И ваш ManagedBean должно быть.

import java.io.Serializable; 
import javax.faces.bean.ManagedBean; 
import javax.faces.bean.RequestScoped; 
import javax.faces.event.ActionEvent; 

@ManagedBean(name = "userMB") 
@RequestScoped 
public class UsersManagedBean implements Serializable { 

    public void login() { 
     System.out.println("print here..."); 
    } 
} 
+0

Удалено, но все равно никак. – user3377708

+0

Спасибо, но не работает. – user3377708

1

Я скопировал ваш полный пример страницы login.xhtml в свой тестовый проект, и он отлично работает. Управляемый боб, который я создал сам.

Вы пытались избежать перформансов? Используйте стандартную реализацию JSF и попробуйте еще раз:

<h:commandButton id="loginBtn" value="Login" type="submit" actionListener="#{userMB.login}"/> 

Обратите внимание на <h: вместо <p: для commandButton.

К слову: type="sumbit" по умолчанию используется в PrimeFaces и не имеет значения, чтобы опустить или использовать этот атрибут со значением submit (Руководство пользователя PrimeFaces 5.1, стр. 108).

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