2012-04-10 5 views
1

Я новичок в JSF и RichFaces. У меня есть кнопка, которая должна вызывать метод для bean-компонента. Когда я используюa4j: commandButton не работает

<h:commandButton action="#{loginBean.userLogin}" value="Login" /> 

это работает отлично, но когда я нажимаю на

<a4j:commandButton action="#{loginBean.userLogin}" value="Login" /> 

ничего не происходит.

Мой код боб:

public class LoginBean { 

@Size(min = 2, max = 20, message = "Must be betwen 2 and 20 chars") 
private String   login; 
@Size(min = 1, message = "Please Enter your password") 
private String   password; 

//getters and setters 

public String userLogin() { 
    //user login code 

} 
} 

код Моя страница JSP:

<body> 
<f:view> 
<div > 
    <h:form id="loginForm"> 
     <h:panelGrid columns="3"> 
      <h:outputLabel for="login" value="Login:" /> 
      <h:inputText id="login" value="#{loginBean.login}" > 

      </h:inputText> 
      <rich:message for="login" /> 

      <h:outputLabel for="password" value="Password:" /> 
      <h:inputSecret id="password" value="#{loginBean.password}" /> 
      <rich:message for="password" /> 
     </h:panelGrid> 

     <div> 
      <h:commandButton action="#{loginBean.login}" value="Login" /> 
      <a4j:commandButton action="#{loginBean.login}" value="Login" /> 
     </div> 
     <div> 
      <a href="<%= request.getContextPath() %>/registration.jsf">Registration</a> 
     </div> 
    </h:form> 
</div> 
</f:view> 
</body> 

Так как вы можете видеть, что я даже добавил две кнопки. Один работает отлично, а второй ничего не делает.

UPD: Сначала я не использовал RichFaces, и мое приложение отлично работало. Поэтому я предполагаю, что правила навигации и т. Д. В порядке. То, что не работает, - это a4j: commandButton, который я только что добавил.

UPD2: Вот моя web.xml:

<?xml version="1.0" encoding="UTF-8"?> 
<web-app xmlns="http://java.sun.com/xml/ns/javaee" version="2.5" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> 

<display-name>webappsaichuk</display-name> 
<welcome-file-list> 
    <welcome-file>index.jsp</welcome-file> 
</welcome-file-list> 

<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>*.jsf</url-pattern> 
</servlet-mapping> 

<servlet-mapping> 
    <servlet-name>Faces Servlet</servlet-name> 
    <url-pattern>/faces/*</url-pattern> 
</servlet-mapping> 

<listener> 
    <listener-class>com.sun.faces.config.ConfigureListener</listener-class> 
</listener> 

+0

Вы можете добавить свой код бэкбона? –

+0

добавлен bean-код и код страницы –

+0

обновлен мой ответ –

ответ

0

Ваш метод должен иметь другое имя из своего атрибута.

public class LoginBean { 

    @Size(min = 2, max = 20, message = "Must be betwen 2 and 20 chars") 
    private String login; 
    @Size(min = 1, message = "Please Enter your password") 
    private String password; 

    //getters and setters... 

    public String userLogin() { 
     //user login code 
    } 
} 
<h:inputText id="login" value="#{loginBean.login}" styleClass="rowInput"> 
<h:commandButton action="#{loginBean.userLogin}" value="Login" /> 
<a4j:commandButton action="#{loginBean.userLogin}" value="Login" /> 

UPDATE

Вы должны добавить фильтр RichFaces в web.xml (на основе Getting started with RichFaces):

<!-- some context params to get better performance for RichFaces --> 
<context-param> 
    <param-name>org.ajax4jsf.COMPRESS_SCRIPT</param-name> 
    <param-value>true</param-value> 
</context-param> 
<context-param> 
    <param-name>org.ajax4jsf.SKIN</param-name> 
    <param-value>classic</param-value> 
</context-param> 
<context-param> 
    <param-name>org.ajax4jsf.handleViewExpiredOnClient</param-name> 
    <param-value>true</param-value> 
</context-param> 
<context-param> 
    <param-name>org.richfaces.LoadScriptStrategy</param-name> 
    <param-value>ALL</param-value> 
</context-param> 
<context-param> 
    <param-name>org.richfaces.LoadStyleStrategy</param-name> 
    <param-value>ALL</param-value> 
</context-param> 
<!-- main filter for RichFaces --> 
<filter> 
    <display-name>Ajax4jsf Filter</display-name> 
    <filter-name>ajax4jsf</filter-name> 
    <filter-class>org.ajax4jsf.Filter</filter-class> 
</filter> 

<filter-mapping> 
    <filter-name>ajax4jsf</filter-name> 
    <servlet-name>Faces Servlet</servlet-name> 
    <dispatcher>REQUEST</dispatcher> 
    <dispatcher>FORWARD</dispatcher> 
    <dispatcher>INCLUDE</dispatcher> 
</filter-mapping> 
+0

Thank's. Отредактировал мой код, но это не решило проблему. –

+0

@MaxSaichuk вы написали навигационное правило для своей страницы JSP? –

+0

Конечно. Сначала я использовал RichFaces, и мое приложение отлично работало. Я попытался добавить RichFaces. Старая функциональность все еще работает нормально. Вещь, которая не работает, - a4j: commandButton –

-1

a4j: CommandButton является AJAX Submit. Таким образом, ничего не произойдет, если вы не переделаете часть экрана, которая изменилась в зависимости от действия.

+0

Его функция «входа» возвращает 'String', поэтому' a4j: commandButton' выполнит отправку ajax и продолжит правило навигации. –

+0

В моем методе userLogin() я делаю SELECT из БД. Я развертываю свое приложение в JBoss 6. В действии выполняется - я могу видеть SELECT в журнале. Поэтому я уверен, что мой a4j: commandButton ничего не делает. –

+0

Интересно. Я не знаю, в чем дело.Но если это так, то все равно нужно повторно отобразить часть экрана для сообщений проверки. – thejosh