小西です。
>1回目からやるためにはTableRowGroupを空っぽにしておく必要があります。
1回目、2回目に関係なく、prerenderが呼ばれたタイミングで
tableRowGroup.getChildren()にテーブルカラムをaddするようにしています。
(tableRowGroup.は空にしていません)
ここでaddの前に、tableRowGroup.getChildren().clear () をしてしまうと、
カラム情報のメモリが解放されてしまうようなので、clearはしないで
並び順だけ変えるようにしています。
これだけで、ヘッダの設定、カラムの並び替え、ハイパーリンクの並びかえ
に対応できていると思っています。
(もう少しテストしないとわかりませんが)
よろしくお願いします。
----- Original Message -----
From: "shin" <
shinsan@...>
To: <
nbdiscuss_ja@...>
Sent: Saturday, May 10, 2008 5:03 PM
Subject: Re: [nbdiscuss_ja] VWPの表にてヘッダ文字を動的に設定する方法
> shinsanです。
>
>
> "Hideo Konishi" <
h-konishi@...> wrote:
>
>> たとえば1列目をハイパーリンクにし、これを押した場合、詳細ページに飛ぶという
>> 処理をいれるとします。上述の方法で1列目と2列目のデータを入れ替えた場合、
>>
>> 1列目のデータは2列目に移動しますが、ハイパーリンクは1列目のままです。
>> ハイパーリンクも2列目に移動させるには、tableRowGroup.getChildren()
>> を入れ替えてやる以外に方法がないように思われます。
>>
>> 何かいい方法がありますでしょうか?
>
>
> 最初にほしい機能としてあげられたヘッダテキストや各種プロパティの変更だけなら
>
> 先ほどの方法で変更できます。
>
>
> ただし、このaddする方法でも問題となった最初の表示は変更できないと思うのですが、
> どうでしょうか?2回目以降は問題がないのは分りますが。
>
> カラムのコンポーネントの動的な変更はこのままでは無理です。TableRowGroupを空に
> して追加することが必要となります。
>
>
> 念のために軽くwoodstock(VisualWebで使用するコンポーネントライブラリ)とmojarra
> (JSFの実装)のソースを追ってみました。
>
> woodstock側ではTableRowGroup、TableRowGroupBaseともに処理はしていませんでした。
> 継承元のJSF側を見てみます。
>
> UIComponentBaseの中にあるstatic でprivate なChildrenListというのが
> ArrayList<UIComponent>を継承したクラスがコンポーネントの順序等を保持するクラス
> のようです。
>
> ここのaddメソッドを見ると以下のように書かれています。
> public boolean add(UIComponent element) {
> if (element == null) {
> throw new NullPointerException();
> } else {
> eraseParent(element);
> element.setParent(component);
> return (super.add(element));
> }
> }
>
> そしてeraseParentの抜粋です
>
> private static void eraseParent(UIComponent component) {
>
> UIComponent parent = component.getParent();
> if (parent == null) {
> return;
> }
> if (parent.getChildCount() > 0) {
> List children = parent.getChildren();
> int index = children.indexOf(component);
> if (index >= 0) {
> children.remove(index);
> return;
> }
> }
>
>
> 自分の親をセットする前に親の中にそのコンポーネントが存在すれば一度削除をして
>
> 追加をしているようです。
>
> ですから、順序を指定して順番にaddをするということ自体は問題ないのが分ります。
>
> 他の追加系やset等も同様です。
>
> 30回addをすればすべてソートされるはずです。
>
>
> やはり、2回目以降(isPostback() == true)ならば問題ないですね。
> でも一番最初の問題としてあげられた1回目の変更はできません。
>
> 1回目からやるためにはTableRowGroupを空っぽにしておく必要があります。
>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail:
nbdiscuss_ja-unsubscribe@...
> For additional commands, e-mail:
nbdiscuss_ja-help@...
>
---------------------------------------------------------------------
To unsubscribe, e-mail:
nbdiscuss_ja-unsubscribe@...
For additional commands, e-mail:
nbdiscuss_ja-help@...