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
类,但是变量名上的注释确定了问题的原因。