1

a4j:outputPanel内で定義され、HtmlDataTableを作成するセッションスコープのバッキングBeanにバインドされた豊富なdataTableがあります。それ自体で、私のコードのその部分は正常に機能しており、dataTableは見栄えがします。

ページの別の部分には、a4j:commandLinksとして作成しているいくつかの基本的なテキストリンクがあり、それらがクリックされると、dataTableは新しい行と列のデータで再レンダリングされる必要があります。行データは正常に更新されますが、列データ(ヘッダーテキスト、幅など)は正常に更新されません。

コードを少し掘り下げた後、HtmlDataTableのバッキングBeanの呼び出しは、そのテーブルの再レンダリング中に行われていないようですが、ページ全体がリロードされると再レンダリングされます。ですから、ここで私を悩ませているのはajax4jsf/reRenderingの部分だけのようです。

reRenderプロセスにdataTable構造を無効にして、バッキングBeanを再度呼び出すようにする方法はありますか?

それが何かを意味するのであれば、私もSeamを使用しています。したがって、それを使用して解決策が見つかった場合は、それも役立ちます。

ありがとう!

4

2 に答える 2

1

後世のために、私は解決策を見つけました。アクションリスナーBeanに対してa4jリクエストが行われるたびに、dataTable構築Beanにテーブルをフラッシュするように指示します。次に、そのBeanは単純なmyDataTable.getParent()。getChildren()。remove(myDataTable)を実行します。このページは私がそれを理解するのに役立ちました:http: //www.coderanch.com/t/213312/JSF/java/dynamic-datatable-binding

于 2010-03-11T18:15:22.400 に答える
0

アクションでは、セッションスコープのBeanをコンテキストから削除するだけです。

例えば:

<a:commandLink action="#{someBean.perform}" value="Submit" reRender="myTable"/>

とアクション:

@Name("someBean")
public class SomeBean {

  public void perform() {
    //do stuff

    Contexts.removeFromAllContexts("myBean");  
  }
}

それ以外の場合、dataTableにリストが入力されている場合は、search()を呼び出すか、データをロードするメソッドを呼び出すのと同じくらい簡単です。

于 2010-03-11T09:53:25.743 に答える