JSF2.0: EL не разрешены в taglib составного компонента - PullRequest
0 голосов
/ 30 декабря 2010

Я пытаюсь создать пользовательский составной компонент taglib в моем офисе, но у меня возникает странная проблема с EL. Кажется, выражения как # {cc.attrs. [Var]} уже разрешены как пустые.

Я пытаюсь создать мой taglib в банке. В моей банке мои файлы упорядочены следующим образом:

| _ /

..... | _ META-INF

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

.......... | _ resources

............... | _ компоненты

.................... | _ 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-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.

Я что-то не так сделал?

Ответы [ 2 ]

1 голос
/ 01 февраля 2011

Да, этот случай появляется и с другими атрибутами.Я пытался с компонентом в веб-приложении, и проблема не появляется.Я также попытался с компонентом в банке с пространством имен по умолчанию: проблема не появляется.Я думаю, что есть ошибка при использовании составного компонента в банке с пользовательским пространством имен.

1 голос
/ 31 января 2011

Тестировали ли вы свой элемент управления в веб-приложении, а не из taglib (jar-файл)? Я могу только догадываться, но я думаю, что ваш атрибут не отображается, потому что вы назвали его name . В некоторых случаях атрибут «name» используется JSF (например, в f: атрибут или f: param или даже ui: param использует атрибут имя ). Попробуйте заменить имя атрибута на слово oder.

Вам нужно посмотреть здесь и проверить, доступно ли имя атрибута.

...