我有一段非常简单的代码,如:
@In(create = true) OutletHome outletHome;
它工作正常(使用Seam 2.2.0.GA),并且正在创建和注入对象而没有任何问题。但是当我尝试将其更改为:
@In(create = true) OutletHome deactivationOutletHome;
它突然停止工作,导致异常:
org.jboss.seam.RequiredException:@In属性需要非空值:customerHome.deactivationOutletHome
造成这种问题的原因是什么?变量名如何相关?我怎么能解决它?
答案 0 :(得分:5)
尝试,
@In(create = true, value="outletHome")
OutletHome deactivationOutletHome;
您注入的值必须是接缝组件。当遗漏属性“值”时,假设它等于被注入的字段名称。
其他访问接缝组件的方法是:
@In(value="componentName", create = true)
@In("#{componentName}")
答案 1 :(得分:1)
这是猜测但是:
如果必须确保变量名称与您在components.xml文件中声明的变量名称相同。
也许试试:
@In(create = true, value="#{outletHome}")
OutletHome deactivationOutletHome;
答案 2 :(得分:1)
从Seam documentation(强调添加):
默认情况下,Seam会优先考虑 使用名称搜索所有上下文 属性或实例变量 正在注入。你可能希望 指定上下文变量名称 明确地,使用,例如, @In( “当前用户”)。
我猜你有一个类似于:
的OutletHomeImpl@Name("outletHome")
class OutlookHomeImpl implements OutletHome { ... }
对于Seam进行注入,变量需要与要注入的bean具有相同的名称。有其他方法可以做到这一点,但这是“约定优于配置”的方式。
答案 3 :(得分:1)
请记住,SEAM使用异常“范例”进行配置。在这种情况下,例外的是变量名称不等于组件的名称,因此您必须明确告诉seam您要搜索的组件。
这很好,因为它可以导致编写更少的代码,如果你遵循标准,但如果你不记得幕后发生的事情,它会导致一些像这样的疑问:)