我正在尝试将一个seam组件注入到另一个组件中,自动创建它。但是由于某些原因,注入的seam组件抛出了NPE。
XHTML
<a4j:commandLink id="cbrModal"
action="#{detailAction.showInformation(1L)}"
reRender="DetailModal"
limitToList="true">
<h:outputText value="text"/>
</a4j:commandLink>DetailActionBean.java
@Name("detailAction")
public class DetailActionBean implements Serializable {
@In(create = true, required = false)
@Out(required = false)
private RulesValidator rulesValidator;
public void showInformation(long id) {
rulesValidator.setCheckCount(0); // rulesValidator == null here and throws npe
}
)RulesValidator.java
@AutoCreate
@Name("rulesValidator")
@Scope(ScopeType.SESSION)
public class RulesValidator implements Serializable {
private int checkCount = 0;
public void setCheckCount(int checkCount) {
this.checkCount = checkCount;
}
}发布于 2012-02-16 04:26:06
Seam将扫描一个基础包并查找@Name组件,然后这些组件将自动可连线。我应该放一个seam.properties文件(空的)给seam,以便知道要扫描哪些基础包。我正在开发的模块有seam.properties,所以RulesValidator不会被扫描,也不会被当作seam组件对待。因此,autoCreate需要很大的工作量。
发布于 2012-02-15 19:41:45
Required false就是这样。如果它还不存在,它将不会被创建,您应该检查它。自动创建只是意味着您不需要在in注释上定义create true。
更新注释:是的,如果这个注解是presemt,seam将在注入时自动创建一个组件。但是您在注入中声明它不是必需的!这就是为什么seam什么也不做。只需移除@In的所有属性,它就会正常工作。默认值就是您想要的。
https://stackoverflow.com/questions/9288245
复制相似问题