2012-04-03 4 views
1

Ich lerne RichFaces. A4j: commandButton zu .xhtml hinzugefügt. Unten ist mein .xhtml Code,a4j: commandButton funktioniert nicht. Keine Aktion findet statt auf Klick

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" 
xmlns:ui="http://java.sun.com/jsf/facelets" 
xmlns:h="http://java.sun.com/jsf/html" 
xmlns:f="http://java.sun.com/jsf/core" 
xmlns:rich="http://richfaces.org/rich" 
xmlns:a4j="http://richfaces.org/a4j"> 
    <h:head> 
    </h:head> 

    <h:body> 
    <h:form> 
    <rich:panel> 
     <h:panelGrid column="2"> 
      <h:inputText value="#{echoBean.name}"/> 
      <h:outputText value="#{echoBean.name}" id="echoTxt" /> 
      <h:outputText value="Count" /> 
      <h:outputText id="countTxt" value="#{echoBean.count}" /> 
     </h:panelGrid> 
     <a4j:commandButton value="Send" actionListener="#{echoBean.incrementCount}" reRender="echoTxt, countTxt"/> 
    </rich:panel> 
    </h:form> 
    </h:body> 
</html> 

Ich bin mit Richfaces 4. So haben I keine a4j Filter

Aber a4j: command nicht funktioniert. Es macht keine Aktion beim Klicken. Und kein Fehler in Stack-Trace.

Fehle ich etwas?

Dank

Update:

ich die Action mit Wirkung ersetzt haben. Jetzt Onclick der Schaltfläche es die folgende Ausnahme wirft,

java.lang.IndexOutOfBoundsException: Index: 0, Size: 0 
    at java.util.ArrayList.rangeCheck(ArrayList.java:604) 
    at java.util.ArrayList.get(ArrayList.java:382) 
    at javax.faces.component.AttachedObjectListHolder.restoreState(AttachedObjectListHolder.java:165) 
    at javax.faces.component.UIComponentBase.restoreState(UIComponentBase.java:1560) 
    at com.sun.faces.application.view.StateManagementStrategyImpl$2.visit(StateManagementStrategyImpl.java:267) 
    at com.sun.faces.component.visit.FullVisitContext.invokeVisitCallback(FullVisitContext.java:151) 
    at javax.faces.component.UIComponent.visitTree(UIComponent.java:1590) 
    at javax.faces.component.UIComponent.visitTree(UIComponent.java:1601) 
    at javax.faces.component.UIForm.visitTree(UIForm.java:344) 
    at javax.faces.component.UIComponent.visitTree(UIComponent.java:1601) 
    at javax.faces.component.UIComponent.visitTree(UIComponent.java:1601) 
    at com.sun.faces.application.view.StateManagementStrategyImpl.restoreView(StateManagementStrategyImpl.java:254) 
    at com.sun.faces.application.StateManagerImpl.restoreView(StateManagerImpl.java:188) 
    at com.sun.faces.application.view.ViewHandlingStrategy.restoreView(ViewHandlingStrategy.java:123) 
    at com.sun.faces.application.view.FaceletViewHandlingStrategy.restoreView(FaceletViewHandlingStrategy.java:453) 
    at com.sun.faces.application.view.MultiViewHandler.restoreView(MultiViewHandler.java:148) 
    at javax.faces.application.ViewHandlerWrapper.restoreView(ViewHandlerWrapper.java:303) 
    at com.sun.faces.lifecycle.RestoreViewPhase.execute(RestoreViewPhase.java:192) 
    at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101) 
    at com.sun.faces.lifecycle.RestoreViewPhase.doPhase(RestoreViewPhase.java:116) 
    at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118) 
    at javax.faces.webapp.FacesServlet.service(FacesServlet.java:593) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:224) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:169) 
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168) 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98) 
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:928) 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407) 
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:987) 
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:539) 
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:298) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603) 
    at java.lang.Thread.run(Thread.java:722) 

meine verwalteten Bean-Code ist,

/** * */

package org.droidaceapps.src; 

import javax.faces.bean.ManagedBean; 
import javax.faces.bean.RequestScoped; 
import javax.faces.bean.SessionScoped; 
import javax.faces.event.ActionEvent; 

/** 
* @author yasodavenkat 
* 
*/ 
@ManagedBean(name="echoBean") 
@SessionScoped 
public class EchoBean { 

    private String name; 
    private int count; 

    public String getName() { 
     return name; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 

    public int getCount() { 
     return count; 
    } 

    public void setCount(int count) { 
     this.count = count; 
    } 

    public EchoBean() { 
    } 

    public void incrementCount(ActionEvent e){ 
     count = name.length(); 
    } 
} 

Ich verstehe, dass es verwandt ist das Problem der staatlichen Verwaltung. Ist meine Annahme richtig? Vermisse ich etwas anderes?

Dank

+0

Fehler in Serverprotokollen/Firebug? – Daniel

+0

@Daniel - Keine Fehler in den Serverprotokollen. Eigentlich erwarte ich, dass die Länge der gegebenen Zeichenfolge im Textfeld in OutputText angezeigt wird. Es passiert mit normaler Befehlsschaltfläche. Aber wenn ich den a4j: commandButton verwende, funktioniert es überhaupt nicht. – droidsites

Antwort

1

Sie verwenden actionListener für Ihre Befehlsschaltfläche, sollten Sie action verwenden, um es nicht kommen zu lassen Arbeit.

<a4j:commandButton value="Send" action="#{echoBean.incrementCount}" 
    reRender="echoTxt, countTxt"/> 

Plus nicht vergessen, die Daten setzen Sie senden, indem Sie die execute Attribut-Tag. Standardmäßig wird das gesamte Formular gesendet. Weitere Informationen finden Sie in der component documentation und Sie können auf die online showcase beziehen.

UPDATE:

Die name Variable ist null, das ist, warum die diesen Fehler zu werfen. Das ist, weil Sie verwenden. Dies liegt daran, Sie tun, um diesen

<h:inputText value="#{echoBean.name}"/> 
<h:outputText value="#{echoBean.name}" id="echoTxt" /> 

Die echoBean.name zweimal in Ihrem Bean gefassten wird, die ersten mit dem Wert input (den Text, den Sie eingegeben haben) und das zweite Mal mit dem output Wert (null) . Wenn Sie dieses Verhalten möchten, sollten Sie den Vorstellungslink, den ich in meinem Beitrag hinzugefügt habe, wirklich betrachten und analysieren, wie es gemacht werden muss.

+0

Danke für die Antwort. Ich habe nur Ihre Antwort beobachtet und versucht, Action statt ActionListener hinzuzufügen. Dies hat Click-Event übernommen, aber es wirft eine Ausnahme auf. Natürlich glaube ich nicht, dass es damit zusammenhängt, aber Sie können mir dabei helfen. Bitte beachten Sie mein Update in der Frage mit der Managed Bean und der Fehlerverfolgung. – droidsites

+0

@droidsites Ich habe meine Antwort aktualisiert. –

+0

Frage nur auf Eifer .... es ist der Grund hinter diesem Fehler, dann habe ich darüber nachgedacht, wie es funktionierte die Zeit, die ich h: commandButton. Dann beantwortete ich es selbst, als ob ich mit h: commandButton die ganze Seite auffrische, so dass diese Statuswerte verfügbar sind. Aber im Falle von a4j: Wie werden die Zustände aktualisiert? – droidsites

0

Dies sind einige Schritte, um Ihre Problemlösung zu lösen oder zu überprüfen. Bitte beachten Sie, dies aufgrund weniger Informationen über Ihr Projekt (Ihre Backing Bean nicht hier) nicht komplette Lösung ist

  1. try ‚h‘ oder ‚t‘ Tag und versuchen, sie auszuführen
  2. überprüfen Sie verwalten bean Sie erwähnen, Ihr Bean Rahmen steckte es in sessionscope

Wenn diese dann mit Ihrem Backing Bean und Gesichter-config.xml

+0

der Umfang der Bean ist hier nicht das Problem, weil die Aktion kann sogar auf eine Bean mit 'ApplicationScope' ausgelöst werden –