a4j:commandButton无效。点击不会发生任何操作

时间:2012-04-03 10:30:45

标签: jsf richfaces

我正在学习RichFaces。将a4j:commandButton添加到.xhtml。下面是我的.xhtml代码,

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

我正在使用richfaces 4.所以我没有给出任何a4j过滤器

但是a4j:commandButton无效。它没有对点击进行任何操作。堆栈跟踪没有错误。

我错过了什么吗?

由于

更新

我已将actionListener替换为action。 现在点击按钮会抛出以下异常,

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)

我的托管Bean代码是,

/ **  *  * /

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();
    }   
}

据我所知,这与国家管理问题有关。我猜是正确的吗?我还想念别的吗?

由于

2 个答案:

答案 0 :(得分:1)

您使用actionListener作为命令按钮,应使用action使其正常工作。

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

另外,请不要忘记通过添加execute属性标记来设置您要发送的数据。默认情况下,它将提交所有表单。您可以在component documentation中找到更多信息,然后可以参考online showcase

更新:

name变量为null,这就是它抛出该错误的原因。那是因为你正在使用。这是因为你正在做这个

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

在您的bean中设置echoBean.name两次,第一次使用inputText值(您输入的文本),第二次使用outputText值(null)。如果你想要这种行为,你应该看看我在帖子中添加的展示链接,并分析它必须如何完成。

答案 1 :(得分:0)

这些是解决或检查问题解决方案的一些步骤。请注意,这不是完整的解决方案,因为您的项目信息较少(您的支持bean不在此处)

  1. 尝试'h'或't'标记并尝试运行它
  2. 检查你的管理bean你提到你的bean范围把它放在sessionscope
  3. 如果这不起作用,那么请附带你的支持bean和faces-config.xml