問題はそれがどのように宣言されたかにあったようです。たとえば、これを使用してメソッドを宣言していました。
public class KTagLib extends AbstractTagLibrary {
public static final String NAMESPACE = "http://mysite.blah/tags";
public static final KTagLib INSTANCE = new KTagLib();
public KTagLib() {
super(NAMESPACE);
try{
try {
Method[] methods = KTags.class.getMethods();
for (int i = 0; i < methods.length; i++) {
if (Modifier.isStatic(methods[i].getModifiers())) {
this.addFunction(methods[i].getName(), methods[i]);
}
}
} catch (Exception e) {
throw new RuntimeException(e);
}
}
}
次の構成を使用します。
<?xml version="1.0"?>
<!DOCTYPE facelet-taglib PUBLIC "-//Sun Microsystems, Inc.//DTD Facelet Taglib 1.0//EN" "http://java.sun.com/dtd/facelet-taglib_1_0.dtd">
<facelet-taglib>
<library-class>mypackage.KTagLib</library-class>
</facelet-taglib>
ただし、this.addFunction()は基本的にjava.util.Mapオブジェクトを呼び出しput()ているため、キーはの間で同じであるため、重複するメソッドを追加することはできませんdoStuff。
この問題を解決するには、問題を動的に解決する方法を誰かが知らない限り、*。taglib.xmlでメソッドを明示的に宣言する必要があります。