0

我正在尝试将接缝组件注入另一个,自动创建它。但是由于某种原因,注入的接缝组件会抛出 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

   }
)

规则验证器.java

@AutoCreate
@Name("rulesValidator")
@Scope(ScopeType.SESSION)
public class RulesValidator implements Serializable {

    private int checkCount = 0;
    public void setCheckCount(int checkCount) {
        this.checkCount = checkCount;
    }


}
4

2 回答 2

1

required false 就是这个意思。如果它尚不存在,则不会创建它,您应该检查它。自动创建只是意味着您不需要在 in 注释上定义 create true 。

评论更新:是的,如果此注释存在,seam 将在注入时自动创建一个组件。但是您在注射中声明它不是必需的!这就是为什么 seam 什么都不做的原因。只需删除 @In 的所有属性,它应该可以工作。默认值是您想要的。

于 2012-02-15T11:41:44.580 回答
1

Seam 将扫描一个基础包并寻找@Name 组件,然后这些组件是自动可连接的。我应该放一个 seam.properties 文件(空)让 seam 知道要扫描哪些基础包。我正在处理的模块有 seam.properties,因此 RulesValidator 没有被扫描并被视为接缝组件。因此 autoCreate dint 工作。

于 2012-02-15T20:26:05.680 回答