2011-07-25 14 views
0

ユーザーが列からデータを編集できるようにするJSPページがあり、フォームが送信されるとデータベース内のそれぞれのテーブルを更新します。この表の行数は可変です。私は、JSPページに次のコードスニペット(のはブロックAという名前を付けてみましょう)が編集可能な情報フィールドについてはRichfaces:dataTable内のinputTextのa4jサポート(action、actionListener)

<h:inputText value="#{myBackingBean.theFieldValue}" > 
    <a4j:support event="onchange" actionListener="#{myBackingBean.theActionListener}" action="#{myBackingBean.theAction}"/> 
    </h:inputText> 

次のコードスニペットを(のはブロックBという名前を付けましょう)されます

public String theAction() { 
    String outcome = null; 
    System.out.println("the action method was invoked"); 
    return outcome; 
} 

public void theActionListener(ActionEvent actionEvent) { 
    System.out.println("the action listener method was invoked"); 
} 

これらのメソッドが呼び出され、コンソール出力に出力されると、わかります。

私の問題がある:

<h:form id="myForm"> 
    (...) 
    here I put Block A 
    (...) 
</h:form> 

ブロックBが問題なく起動され: Iは(形態で単一 inputTextコンポーネント)は、以下のブロック内ブロックAを置く場合。しかし、代わりに、ブロックAをrich:dataTableコンポーネント内に入れて、各行のinputText値をデータベースに格納するために必要に応じて(複数のinputTextコンポーネントを)入力します(ここでは、および/またはのactionListener法):この場合、

<h:form id="myForm"> 
    <rich:dataTable id="myDataTable" value="#{myBackingBean.myObjectList}" var="item" binding="#{myBackingBean.myObjectHtmlDataTable}" rendered="#{!empty myBackingBean.myObjectList}" rows="20"> 
    (...) 
     <rich:column> 
      here I put Block A 
     </rich:column> 
    (...) 
    </rich:dataTable> 
</h:form> 

は、ブロックBは到達しません。私はJSF 1.2、およびRichFacesの3.3.3で働いている

、すべての必要な豆とナビゲーションルールが正しく設定されています。すべての必要なゲッターとセッターはそれぞれのクラスに入っています。

私のコードを正しく動作させるためのアドバイスをいただけますか?前もって感謝します。

答えて

0

私はあなたのコードをテストし、それは非常にうまく動作します。両方のアクションメソッドを実行できます。

Beanのメソッドを実行できないようにサーバー上で処理すると、フォーム内の他のコンポーネントにエラーが発生する可能性があります。

変更した<h:inputText>を処理するサーバーを制限することができます。<a4j:region>を使用してください。アクションメソッドを呼び出すことができれば、フォーム内の他のコンポーネントが原因であることが確認できます。あなたの<h:form>onsubmit()イベントハンドラを持っている場合

<rich:column> 
    <a4j:region> 
     <h:inputText value="#{myBackingBean.theFieldValue}" > 
       <a4j:support event="onchange" actionListener="#{myBackingBean.theActionListener}" action="#{myBackingBean.theAction}"/> 
     </h:inputText> 
    </a4j:region> 
</rich:column> 

、またそれがフォームを送信するために、trueを返すことを確認してください。

関連する問題