[Seasar-user:15962] Re: [Teeda][提案]forEachにて生成されるidをかぶらないようにする
あきら
[E-MAIL ADDRESS DELETED]
2008年 10月 10日 (金) 18:23:48 JST
あきらです
> 実装みたところforeach改造するより DefaultComponentIdLookupStrategy
> を元に独自クラスを作って登録した方がスマートですね(汗)
てことで組んでみました
仕様はおんなじで
===============================
<div id="title-0">item0_title</div>
<div id="note-0">item0_note</div>
<div id="title-1">item1_title</div>
<div id="note-1">item1_note</div>
===============================
みたいな出力になります
プロジェクトにソースを追加しておいて
src/main/resources/teedaCustomize.dicon に
<component class="org.seasar.teeda.core.render.PostIndexComponentIdLookupStrategy"
/>
上記を登録するとこの形式になります。
本体を改造しないで使えるので個人的には満足です
中身は : でスプリットして、Itemsで終わる要素の場合に次の要素の番号を
追加しています。
ForEachのinputでも正常に値を引き継げることは確認しました。
可能であればこの手の書式も本体に取り込んでもらい、IDの形式
をユーザーで選べるようになっているとうれしいかなと思いました。
あきら
---------------------------------------------------------------------------------
/*
* Copyright 2004-2008 the Seasar Foundation and the Others.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
* either express or implied. See the License for the specific language
* governing permissions and limitations under the License.
*/
package org.seasar.teeda.core.render;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
/**
* @author shot
* @author manhole
* @author akira
*/
public class PostIndexComponentIdLookupStrategy implements
ComponentIdLookupStrategy {
public String getId(final FacesContext context, final UIComponent
component) {
final String id = component.getId();
if (id != null) {
String clientIdList[] = component.getClientId(context).split(":");
String postIndex = "";
int i = 0;
while( i+1 < clientIdList.length ){
if( clientIdList[i].endsWith("Items") ){
// Items
postIndex += "-" + clientIdList[i+1];
i++;
}
i++;
}
return context.getExternalContext().encodeNamespace(id) + postIndex;
}
return component.getClientId(context);
}
}
Seasar-user メーリングリストの案内