2012-04-10 7 views
1

Ich bin neu in JSF und RichFaces. Ich habe eine Schaltfläche, die eine Methode auf Bean aufrufen sollte. Als icha4j: commandButton funktioniert nicht

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

verwenden es funktioniert gut, aber wenn ich auf

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

nichts passiert.

My Bean-Code:

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 

} 
} 

Meine JSP Suchrufcode:

<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> 

So wie Sie fügte ich noch zwei Tasten zu sehen. Einer funktioniert gut und der zweite tut nichts.

UPD: Ich habe RichFaces zuerst nicht benutzt und meine Anwendung hat gut funktioniert. Also ich denke, Navigationsregeln usw. sind in Ordnung. Die Sache, die nicht funktioniert, ist a4j: commandButton, die ich gerade hinzugefügt habe.

UPD2: Hier ist meine 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

können Sie Ihren Backing-Bean-Code hinzufügen? –

+0

hinzugefügt Bean und Seitencode –

+0

aktualisiert meine Antwort –

Antwort

0

Ihre Methode einen anderen Namen aus dem Attribut haben muss.

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

Sie sollten den Filter Richfaces auf die web.xml (basierend auf Getting started with RichFaces) hinzufügen:

<!-- 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

Danke. Hat meinen Code bearbeitet, aber das Problem wurde nicht gelöst. –

+0

@MaxSaichuk Haben Sie eine Navigationsregel für Ihre JSP-Seite geschrieben? –

+0

Natürlich. Ich habe RichFaces zuerst nicht benutzt und meine Anwendung hat gut funktioniert. Ich habe versucht, RichFaces hinzuzufügen. Die alte Funktionalität funktioniert immer noch gut. Die Sache, die nicht funktioniert, ist a4j: commandButton –

-1

a4j: command ist ein Ajax einreichen. Es wird also nichts passieren, wenn Sie nicht einen Teil des Bildschirms, der sich aufgrund der Aktion geändert hat, erneut rendern.

+0

Seine "Login" -Funktion gibt eine 'String' zurück, so dass' a4j: commandButton' eine Ajax-Submit-Funktion ausführt und mit der Navigationsregel fortfährt. –

+0

In meiner userLogin() Methode mache ich einen SELECT von DB. Ich stelle meine Anwendung auf JBoss 6 bereit. In der Aktion wird ausgeführt - ich kann eine SELECT im Protokoll sehen. Ich bin mir sicher, dass mein a4j: commandButton nichts bewirkt. –

+0

Interessant. Ich bin mir nicht sicher, was der Punkt sein würde.Aber wenn das der Fall ist, dann sollte es immer noch einen Teil des Bildschirms für die Validierungsnachrichten wiedergeben. – thejosh

Verwandte Themen