0

オフィスでカスタム複合コンポーネント taglib を作成しようとしていますが、EL で奇妙な問題が発生します。#{cc.attrs.[var] } のような式は、すでに空として解決されているようです。

jar に taglib を作成しようとしています。私のjarでは、ファイルを次のように並べています。

|_ /

.....|_ メタ-INF

..........|_ compo.taglib.xml

.........|_ リソース

...............|_ コンポーネント

...................|_ hello.xhtml

compo.taglib.xml には以下が含まれます。

<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://www.example.com/jsf/compo</namespace>
<composite-library-name>compo</composite-library-name>
<tag>
<tag-name>hello</tag-name>
<source>./components/hello.xhtml</source>
</tag>
</facelet-taglib>

hello.xhtml には以下が含まれます。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:composite="http://java.sun.com/jsf/composite">

<composite:interface name="hello" displayName="hello">
<composite:attribute name="name" required="true" type="String"/>
</composite:interface>

<composite:implementation >
hello #{cc.attrs.name}!
</composite:implementation>

</html>

私のWebプロジェクトには、WEB-INF libに私のtaglibがjar、jsf-impl.jarおよびjsf-api.jar(Mojarraから)として含まれています。私のページは次のとおりです。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:comp="http://www.example.com/jsf/compo" >
<body>
<comp:hello name="John"></comp:hello>
</body>
</html>

レンダリング時に「こんにちは!」と表示されます 「こんにちはジョン!」ではありません。属性値がどこかで失われているようです。このサンプルを tomcat 6.0.29 と Websphere 7 で試してみました。

私は何か間違ったことをしましたか?

4

2 に答える 2

1

はい、このケースは他の属性でも表示されます。Webアプリケーションでコンポーネントを試してみましたが、問題が発生しません。また、デフォルトの名前空間を持つjar内のコンポーネントで試してみました:問題は表示されません。カスタム名前空間のjarで複合コンポーネントを使用するとバグがあると思います。

于 2011-02-01T14:56:13.277 に答える
1

taglib (jar ファイル) からではなく、Web アプリケーションでコントロールをテストしましたか? 推測することしかできませんが、 name という名前を付けたため、属性が表示されていないと思います。場合によっては、"name" 属性が JSF で使用されていることがあります (たとえば、f:attributeまたはf:paramで、またはui:paramでさえ属性nameを使用します)。属性名を別の単語に置き換えてみてください。

ここを見て、属性名が利用可能かどうかを確認する必要があります。

于 2011-01-31T12:55:28.000 に答える