0

我正在尝试在我的办公室创建一个自定义复合组件标签库,但我遇到了一个奇怪的 EL 问题。似乎 #{cc.attrs.[var] } 的表达式已经解析为空。

我尝试在 jar 中创建我的 taglib。在我的 jar 中,我的文件排序如下:

|_ /

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

您是否在 Web 应用程序中而不是从 taglib(jar 文件)中测试了您的控件?我只能猜测,但我认为您的属性没有显示,因为您将其命名为name。在某些情况下,JSF 正在使用“name”属性(例如在f:attributef:param甚至ui:param中使用属性name)。尝试用 oder word 替换属性名称。

您需要查看此处并检查属性名称是否可用。

于 2011-01-31T12:55:28.000 回答