Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/356.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
Java 为什么“@In(create=true)”不能在Seam中创建对象?_Java_Jboss_Jakarta Ee_Seam - Fatal编程技术网

Java 为什么“@In(create=true)”不能在Seam中创建对象?

Java 为什么“@In(create=true)”不能在Seam中创建对象?,java,jboss,jakarta-ee,seam,Java,Jboss,Jakarta Ee,Seam,我有一段非常简单的代码,如下所示: @In(create = true) OutletHome outletHome; 它工作正常(使用Seam 2.2.0.GA),对象的创建和注入没有任何问题。但当我尝试将其更改为: @In(create = true) OutletHome deactivationOutletHome; 它突然停止工作,导致异常: org.jboss.seam.RequiredException:@In属性需要非空值:customerHome.deactivationO

我有一段非常简单的代码,如下所示:

@In(create = true) OutletHome outletHome;
它工作正常(使用Seam 2.2.0.GA),对象的创建和注入没有任何问题。但当我尝试将其更改为:

@In(create = true) OutletHome deactivationOutletHome;
它突然停止工作,导致异常:

org.jboss.seam.RequiredException:@In属性需要非空值:customerHome.deactivationOutletHome

出现这种问题的原因是什么?变量名如何相关?我该如何修复它呢?

这只是一个猜测,但:

如果必须确保变量名与您在components.xml文件中声明的变量名相同

也许可以试试:

@In(create = true, value="#{outletHome}")
OutletHome deactivationOutletHome;
这只是猜测,但:

如果必须确保变量名与您在components.xml文件中声明的变量名相同

也许可以试试:

@In(create = true, value="#{outletHome}")
OutletHome deactivationOutletHome;
从(增加强调)开始:

默认情况下,Seam将执行优先级 使用名称搜索所有上下文 属性或实例变量的 这是注射。你可能希望 指定上下文变量名称的步骤 明确地使用,例如, @在中(“当前用户”)

我猜你的OutletHomeImpl看起来像:

@Name("outletHome")
class OutlookHomeImpl implements OutletHome { ... }
为了让Seam进行注入,变量需要与要注入的bean具有相同的名称。有其他方法可以做到这一点,但这是“约定优先于配置”的方法。

来自(重点添加):

默认情况下,Seam将执行优先级 使用名称搜索所有上下文 属性或实例变量的 这是注射。你可能希望 指定上下文变量名称的步骤 明确地使用,例如, @在中(“当前用户”)

我猜你的OutletHomeImpl看起来像:

@Name("outletHome")
class OutlookHomeImpl implements OutletHome { ... }
为了让Seam进行注入,变量需要与要注入的bean具有相同的名称。有其他方法可以做到这一点,但这是“约定优先于配置”的方法。

试试


@In(create = true, value="outletHome")
OutletHome deactivationOutletHome;
您注入的值必须是seam组件。当缺少属性“value”时,假定该属性等于注入的字段名

访问seam组件的其他方法包括:


@In(value="componentName", create = true)
@In("#{componentName}")
试试看

您注入的值必须是seam组件。当缺少属性“value”时,假定该属性等于注入的字段名

访问seam组件的其他方法包括:


@In(value="componentName", create = true)
@In("#{componentName}")

请记住,SEAM使用异常配置“范例”。在这种情况下,例外情况是变量名不等于组件名,因此您必须显式地告诉seam您正在搜索的组件


这很好,因为如果您遵循标准,它会导致编写更少的代码,但是如果您不记得幕后发生了什么,它会导致一些类似这样的疑问:)

记住SEAM使用异常配置“范例”。在这种情况下,例外情况是变量名不等于组件名,因此您必须显式地告诉seam您正在搜索的组件


这很好,因为如果您遵循标准,它可以减少代码的编写量,但是如果您不记得幕后发生的事情,它可能会导致类似这样的疑问:)

我不认为变量名更改是唯一的更改。。。是吗?如果您将其更改回outletHome,是否有效?是的,变量名是唯一的更改。正如答案所指出的,这正是问题所在。我不认为变量名的改变是唯一的改变。。。是吗?如果您将其更改回outletHome,是否有效?是的,变量名是唯一的更改。正如答案所指出的,这正是问题所在。谢谢。这是对我问题的精确描述。匹配是通过变量名完成的,而我过去认为是通过类名完成的。谢谢。这是对我问题的精确描述。匹配是通过变量名完成的,而我过去认为是通过类名完成的。谢谢。这是正确的,解决了我的问题,但@cetnar的答案更清晰、更准确。谢谢。这是正确的,解决了我的问题,但@cetnar的答案更清晰、更准确。谢谢。这部分是正确的,因为我没有
Impl
类,但是变量名上的注释确定了问题的原因。谢谢。这部分是正确的,因为我没有
Impl
类,但是变量名上的注释确定了问题的原因。