[英]Custom component in JSF2 not being called
我正在应用程序中创建自定义标签,但由于某种原因它无法正常工作,我遵循了本教程(这是我发现放在此处作为参考的最清晰的教程),但是,就像我做过的其他教程一样,我的自定义标签不叫。
WEB-INF / example.taglib.xml
<?xml version="1.0" encoding="UTF-8"?>
<facelet-taglib
xmlns="http://java.sun.com/xml/ns/javaee"
version="2.0">
<namespace>http://example.com/facelettags</namespace>
<tag>
<tag-name>hello</tag-name>
<handler-class>example.MenuTagHandler</handler-class>
</tag>
</facelet-taglib>
我的标签处理程序类
package example;
public class MenuTagHandler extends TagHandler {
private String name = "Anonymous";
public MenuTagHandler(TagConfig config) {
//other constructor stuff
Logger.getLogger(MenuTagHandler.class).info("aaaa");
//other constructor stuff
}
@Override
public void apply(FaceletContext context, UIComponent parent) throws IOException {
Logger.getLogger(MenuTagHandler.class).info("aaaa");
UIComponentBase c = new UIComponentBase() {
@Override
public void encodeEnd(FacesContext ctx) throws IOException {
ResponseWriter w = ctx.getResponseWriter();
w.write(String.format(
"<p>Hello %s! I am FaceletTag.</p>",
name));
}
// abstract method in base, must override
@Override
public String getFamily() {
return "com.example.facelettag.test";
}
};
parent.getChildren().add(c);
}
}
我的.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">
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:exampler="http://example.com/facelettags" >
<example:hello />
</ui:composition>
呈现的结果是
<example:hello></example:hello>
不幸的是,日志中没有任何内容,为什么有人不知道为什么不调用标签处理程序呢?
如果*.taglib.xml
文件不在/WEB-INF/lib
放置的JAR文件的/META-INF
,则不会自动检测和注册该文件(就像所有第三方一样) JSF组件库,例如PrimeFaces,RichFaces等),那么您需要按照以下步骤在webapp的web.xml
手动注册它:
<context-param>
<param-name>javax.faces.FACELETS_LIBRARIES</param-name>
<param-value>/WEB-INF/example.taglib.xml</param-value>
</context-param>
与具体问题无关 ,请注意,到目前为止,您还没有定制组件。 这是一个自定义标记处理程序,它依次创建UIComponentBase
的匿名实例。 这不一定是“最佳”实践。 如果在视图构建期间不需要执行与组件树相关的任何操作,则根本不需要taghandler部分。 只需创建一个完全@FacesComponent
类即可。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.