我正在尝试在我的办公室中创建自定义复合组件taglib,但我遇到了一个奇怪的问题。似乎#{cc.attrs。[var]}的表达式已经解析为空。
我尝试在jar中创建我的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项目在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上尝试这个示例。
我做错了什么?
答案 0 :(得分:1)
您是否在Web应用程序中测试了控件而不是taglib(jar文件)? 我只能猜测,但我认为您的属性未显示,因为您将其命名为 name 。在某些情况下,JSF使用“name”属性(例如在 f:attribute 或 f:param 或甚至 ui:param 使用属性名称)。尝试用oder字替换属性名称。
您需要查看here并检查属性名称是否可用。
答案 1 :(得分:1)
是的,这种情况也会出现其他属性。 我尝试使用Web应用程序中的组件并且不会出现问题。 我也尝试使用默认命名空间的jar中的组件:问题没有出现。我认为在具有自定义命名空间的jar中使用复合组件时存在错误。