5

ここですでに多くのトピックを閲覧しましたが、どれも私の問題を解決しませんでした。私の問題は単純です: 私は超単純なカスタム コンポーネントを持っています:

@FacesComponent("HelloWorldComponent")
public class HelloWorldComponent extends UIComponentBase {

public String getFamily() {
return "my.custom.component";
}

@Override
public void encodeBegin(FacesContext ctx) throws IOException {
String value = (String) getAttributes().get("value");

if (value != null) {
ResponseWriter writer = ctx.getResponseWriter();
writer.write(value.toUpperCase());
}
}
}

しかし、残念ながら私はエラーが発生します:

JSF1068: Cannot instantiate component with component-type HelloWorldComponent

私のタグライブラリ:

<?xml version="1.0" encoding="UTF-8"?>
<facelet-taglib xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facelettaglibrary_2_0.xsd" version="2.0">

<namespace>http://example.com/test</namespace>
<tag>
<tag-name>helloWorldComponent</tag-name>
<component>
<component-type>HelloWorldComponent</component-type>
</component>
</tag>
</facelet-taglib>

重要なことは、カスタムコンポーネントをfaces-configに配置するとすべてが完璧に機能することですが、JSFの非常に頑固なグリーンホーンとして、カスタムコンポーネントをfaces-configに登録せずに注釈を機能させる方法が必要であると確信しています。多くのカスタム コンポーネントがあることを期待しているので、faces-config に何百万行ものコードを書かないように、それらを純粋な注釈で動作させる方法を知りたいです。

<?xml version="1.0" encoding="UTF-8"?>
<faces-config xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd" version="2.0">

<application>
<el-resolver>org.springframework.web.jsf.el.SpringBeanFacesELResolver</el-resolver>
</application>

<!--    <component> -->
<!--         <component-type>HelloWorldComponent</component-type> -->
<!--         <component-class>com.first.utils.view.components.HelloWorldComponent</component-class> -->
<!--     </component> -->

</faces-config>

コンポーネントタグのコメントを外すと、すべてが機能します。しかし、文字通りそれをしたくありません。怠惰ではなく、コンピューターに私がやりたいことを強制します;)。

プロジェクトの私の構造:(私は春とmavenを使用しています)

src  
~main  
~~java  
~~resources  
~~~META-INF  
~~~~faces-config.xml (duplicated as i read other topics)  
~~~~persistence.xml  
~~webapp  
~~~resources  
~~~~css  
~~~~utilComponent  
~~~WEB-INF  
~~~~templates  
~~~~faces-config.xml  
~~~~my.taglib.xml  
~~~~web.xml  
~~~*.html webpages..  

既に参照したトピック: JSF カスタム コンポーネントが見つかり
ません jar で注釈付きのカスタム JSF2 コンポーネントが見つかりません
JSF を使用するカスタム コンポーネント

taglib を定義する必要がなければ理想的ですが、それは不可能だと思いますか? しかし、まず最初に、注釈を機能させたいと思います...助けていただければ幸いです

4

2 に答える 2

0

アプリケーションサーバーを再起動してみましたか? Spring の場合はどうなるかわかりませんが、JBoss で同様の問題を解決しました。サーバーの起動時に、コンポーネントが自動的に登録される可能性があります。再起動せずに、それらをいくつかのファイルにリストする必要があります。

于 2014-07-09T13:47:31.673 に答える
0

my.taglib.xml ファイルを META-INF ディレクトリに配置してみてください。

http://www.adictosaltrabajo.com/tutoriales/tutoriales.php?pagina=customJsfComponent

于 2013-07-10T23:04:11.567 に答える