扩展ClientBehaviorBase的类是否可以视为注入目标?
问题描述:
豆子被定义为简单如下:扩展ClientBehaviorBase的类是否可以视为注入目标?
@Named
@RequestScoped
public class ConfirmBean {
private String confirmMsg;
public ConfirmBean(){
confirmMsg = "Are you sure you want to delete this file ?";
}
// getters & setters
}
和类与标签库文件 -
<namespace>http://www.custom.tags/jsf/delete</namespace>
<tag>
<tag-name>confirmDelete</tag-name>
<behavior>
<behavior-id>confirm</behavior-id>
</behavior>
</tag>
与条目作为context-param
继承ClientBehaviorBase
@FacesBehavior(value = "confirm")
public class ConfirmDeleteBehavior extends ClientBehaviorBase {
@Inject
ConfirmBean confirmBean;
//@Inject
//ConfirmEJBBean confirmEJBBean;
//@EJB
//ConfirmEJBBean confirmEJBBean;
@Override
public String getScript(ClientBehaviorContext behaviorContext) {
return "return confirm('"+confirmBean.getConfirmMsg()+"');";
}
}
在web.xml
-
<context-param>
<param-name>javax.faces.FACELETS_LIBRARIES</param-name>
<param-value>/WEB-INF/taglib/delete.taglib.xml</param-value>
</context-param>
和访问在前面这个自定义标签层 -
<h:form>
<h:commandButton value="Delete" action="done">
<b:confirmDelete/>
</h:commandButton>
</h:form>
我使用Glassfish
应用服务器4.1.1
与Mojarra 2.2.12
版本正在内部使用。
我得到了NPE
这里 -
答
这与其说是对扩展类使得它不eligable注射那就是@FacesBehaviour
是注释并不能使它注入的目标。有一点谷歌搜索告诉我这个:In JSF 2.2 it is not a target for injection, in 2.3 it is。
OmniFaces在FacesConverter s和FacesValidator中添加了对注入的支持,以便与jsf 2.2一起使用,但不支持FacesBehaviour。
参见:
你的标签顺便说一句那种暗示它在MyFaces的工作(由于加钻嘴鱼科标签)和如在JBoss中(由于GlassFish标签)。至少,我总是阅读标签... – Kukeltje