bob*_*bel 3 jsf uicomponents java-ee cdi
我的印象是CDI没有使用具有@javax.faces.component.FacesComponent
.的类.这是真的?
这是我的例子,这不起作用.将MyInjectableClass
用于在在注射是没有问题的代码等穴位,所以它必须是有关@FacesComponent
注释,我认为.
我要注入的课程:
@Named
@Stateful
public class MyInjectableClass implements Serializable {
private static final long serialVersionUID = 4556482219775071397L;
}
Run Code Online (Sandbox Code Playgroud)
使用该类的组件;
@FacesComponent(value = "mycomponents.mytag")
public class MyComponent extends UIComponentBase implements Serializable {
private static final long serialVersionUID = -5656806814384095309L;
@Inject
protected MyInjectableClass injectedInstance;
@Override
public void encodeBegin(FacesContext context) throws IOException {
/* injectedInstance is null here */
}
}
Run Code Online (Sandbox Code Playgroud)
sku*_*sel 13
不幸的是,即使是JSF 2.2 @FacesComponent
,@FacesValidator
而@FacesConverter
不是有效的注入目标(读在JSF 2.2有什么新鲜事?了解更多详情由阿尔扬Tijms).正如Arjan指出:
尽管如此,JSF 2.3可能会考虑这些因素.
你现在能做什么?好吧,你基本上有两个选择:
@Named
代替@FacesComponent
,@Inject
该组件你的方式和faces-config.xml中注册您的组件.由于UI组件实例是通过JSF Application#createComponent()创建的,而不是通过CDI创建的,因此您也需要一个自定义的应用程序实现(就像OmniFaces对那些转换器/验证器一样).顺便说一句,你有两个问题就是你到目前为止所得到的:(1)@Named @Stateful
当前者来自CDI世界而后者来自EJB世界时是什么意思?(2)你确定吗?您打算将状态保存在基本上每次请求都重新创建的faces组件中?
归档时间: |
|
查看次数: |
2775 次 |
最近记录: |