Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jsf 2 @无转换器id和forClass的Faces转换器_Jsf 2_Jsf 2.2 - Fatal编程技术网

Jsf 2 @无转换器id和forClass的Faces转换器

Jsf 2 @无转换器id和forClass的Faces转换器,jsf-2,jsf-2.2,Jsf 2,Jsf 2.2,如果在确定@FacesConverter注释时未指定转换器id和(或)forClass,那么应该如何正常工作? 例如: @FacesConverter public class SplitConverter implements Converter{ @Override public Object getAsObject(FacesContext context, UIComponent component, String value) { //... } @Overr

如果在确定@FacesConverter注释时未指定转换器id和(或)forClass,那么应该如何正常工作? 例如:

@FacesConverter
public class SplitConverter implements Converter{

@Override
public Object getAsObject(FacesContext context, UIComponent component,
        String value) {
    //...
}
@Override
public String getAsString(FacesContext context, UIComponent component,
        Object value) {
    //...

} 
在faces-config.xml中注册并在.xhtml页面上使用后:

<h:inputText id="badges" value="#{article.badges}" 
    required="true">
    <f:converter converterId="com.katcgr.SplitConverter" />
</h:inputText>

一切都是工作。文件上说

如果converter id为空字符串,则调用Application.addConverter(java.lang.Class,java.lang.string),将converter for Class作为第一个参数传递,将派生的converter类作为第二个参数传递

但是为什么即使我没有指定forClass,所有的东西都可以正常工作呢

在faces-config.xml中注册后

通过
@facescoverter
faces config.xml
中的
注册是互斥的,因此xml注册覆盖任何注释注册。因此,当通过在XML中注册的转换器ID引用转换器时,转换器实例的行为基本上与没有注释的情况完全相同。如果删除了XML注册,则应该已在指定的
转换器ID
上检索到以下异常:

javax.faces.FacesException: Expression Error: Named Object: com.katcgr.SplitConverter not found.
    at com.sun.faces.application.ApplicationImpl.createConverter(ApplicationImpl.java:1339)
    at javax.faces.application.ApplicationWrapper.createConverter(ApplicationWrapper.java:393)
    at com.sun.faces.facelets.tag.jsf.ConverterTagHandlerDelegateImpl.createConverter(ConverterTagHandlerDelegateImpl.java:158)
    ...
这基本上只有在你有一个

@FacesConverter("com.katcgr.SplitConverter")
但是,如果您同时删除XML配置和
,那么它将“工作”,因为没有显式
forClass
@FacesConverter
将自动为作为
java.lang.Object
实例的每个bean属性调用(基本上是所有内容),尚未注册更具体的转换器。换句话说,转换器的行为如下:

@FacesConverter(forClass=Object.class)

希望不需要详细解释这是一个非常糟糕的想法。它还将混淆PrimeFaces,因为它将在内部初始化并将其用作
字符串
类的默认转换器?因此,您基本上是通过XML中的
条目手动注册转换器,而不是依赖
@FacesConverter
?如果您使用的是批注,则完全不需要在XML中注册。@BalusC是的,我已经安装了PrimeFaces。我还看到转换器在没有指定converterId的情况下工作。只有一些扩展,如
pe:CKEditor
不能正常工作。@BalusC谢谢,我想我已经找到了问题的答案。据我所知,它的工作或多或少是稳定的,因为我在项目中有PrimeFaces。