2012-04-03 10 views
1

私はRichFacesを学習しています。 .xhtmlにa4j:commandButtonを追加しました。以下は私の.xhtmlコード、私はだから私はどのa4jフィルターa4j:commandButtonが機能していません。クリック時に何も処理が行われていません

しかしa4j与えられていないRichFacesの4を使用しています

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

です:commandButtonのが機能していません。クリックでは何もしません。スタックトレースにエラーはありません。

何か不足していますか?

おかげ

アップデート:私はアクションでActionListenerを交換した

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

*/

今のonclickそれは次の例外をスローボタン、の

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コードは、

/** * 私はそれが関連していることを理解します状態管理の問題私の推測は正しいですか?私は他のことを忘れていますか?

おかげ

+0

サーバログのエラー/ firebug? – Daniel

+0

@Daniel - サーバーログにエラーはありません。実際には、テキストフィールドの指定された文字列の長さがOutputTextに表示されることを期待しています。それは通常のcommandButtonで起こっています。しかし、私がa4j:commandButtonを使用すると、それはまったく動作しません。 – droidsites

答えて

1

、あなたがそれを作るためにactionを使用する必要がありますが作業。

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

プラス、あなたはexecute属性タグを追加することにより、送信しているデータを設定することを忘れないでください。デフォルトでは、すべてのフォームが送信されます。 component documentationに詳細情報があり、online showcaseを参照できます。

UPDATE:

name変数は、そのエラーを投げる理由です、nullです。それはあなたが使っているからです。あなたはechoBean.nameがoutputTextの値(ヌル)とのinputText値(あなたが入力したテキスト)と二回目の最初の、あなたの豆で二回settedされている。この

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

をやっているからです。この動作が必要な場合は、自分の投稿に追加したショーケースのリンクを実際に見て、どのようにしなければならないかを分析する必要があります。

+0

返事をありがとう。あなたの返事を見て、私はactionListenerの代わりにactionを追加しようとしました。これはクリックイベントを受け取りましたが、例外をスローしています。もちろん、私はそれはこれに関連しているとは思わないが、あなたはこれで私を助けるかもしれない。マネージドBeanとエラートレースに関する質問の私の更新を見てください。 – droidsites

+0

@droidsites私は自分の答えを更新しました。 –

+0

ちょうど熱心に尋ねて....それはそのエラーの背後にある理由で、私はh:commandButtonを使った時の仕組みを考えていました。それから、h:commandButtonを使うときと同じように自分自身に答えると、それらの状態値が利用できるようにページ全体がリフレッシュされます。しかしa4jの場合:どのように状態が更新されますか? – droidsites

0

これらはあなたの問題解決を解決したり、チェックするためにいくつかのステップがあります。原因プロジェクト(あなたのバッキングBeanないここ)

  1. 試して「H」または「T」タグに関する以下の情報に、これは完全な解決策ではないことに注意して、あなたが言及あなたの管理Beanをチェック
  2. それを実行してみてくださいあなたの豆の範囲は、これが動作しない場合は、あなたのバッキングBeanが付属してsessionScopeと

に入れて直面-config.xmlのあなたのコマンドボタンのactionListenerを使用している

+0

Beanのスコープはここでは問題ではありません。なぜなら、そのアクションは、 'ApplicationScope'を持つBean上でさえも起動することができるからです。 –

関連する問題