2017-08-22 10 views
1

現在、Tapestry 5.3で作業中です。ツリーコンポーネントを使用して、4レベルのアカウントリストの階層を表示しています。しかし今、私はこのシナリオで検索機能に苦労しています。検索機能付きTreeModelAdapter

Level 1-1 
|_ _ _ Level 2-1 
|_ _ _ Level 2-2 
    |_ _ _ Level 3-1 
     |_ _ _ Level 3-2 
       |  |_ _ _ Level 4-1 
     |  |_ _ _ Level 4-2 
     |_ _ _ Level 3-3 

たとえば、ユーザーは、アカウントレベル4-1を検索したい、木はこの

Level 1-1 
|_ _ _ Level 2-2 
      |_ _ _ Level 3-2 
            |_ _ _ Level 4-1 

のように表示すべき誰かがこのロジックのもの私を助けてくださいことはできますか?ありがとう。

答えて

0

最後に、私はそれを理解しました。

新しいクラスAccountTreeModelAdapterが作成されました。実装はTreeModelAdapterです。 getChildrenメソッドをオーバーライドして検索ロジックを配置することができます。

  • はあなたのリスト全体(すべてのアカウント)を反復処理し、1を比較するために、getChildren方法では、それはあなたのメインクラス
  • からの値ですAccountTreeModelAdapter
  • セットでsetSearchedAccounts(List<Account> searchedAccounts)メソッドを追加Iteratorを使用します。私にとっては、この流れの中で動作しますsearchedAccountsの各アカウントのコード(Java 8ではsearchedAccounts.stream().filter()を使用)で1つずつ

ここで、ツリーにはあなたが望むアカウントしか表示されません。 しかし、親を表示する方法は?この時点まで、ツリーは親と親の親と親の親を何度も何度も表示しません。

これを達成するために、データベースのアカウントエンティティの新しい列を作成します。 accountPathです。だから、毎回ユーザーがアカウントを作成し、このaccountPathは次のように動作します。(それはROOTだから)

Account "ABC" (ID: 1) 
    |_ _ _ "XYZ" (ID: 2) 
    |_ _ _ "OPQ" (ID: 3) 
           |_ _ _ "STU" (ID: 4) 

アカウント「ABC」の意志には、パスを持っていません。 アカウント「XYZ」意志はパス-1- アカウントを持っている「OPQは、」意志はパス-1-2- アカウント「STU」の意志はパス-1-2-3-

それぞれの親のIDを取得するには、使用していましたstring.split( " - ")

したがって、ツリーに親を表示したい場合は、親アカウントをsearchedAccounts listに追加するだけです。

それだけです。