【问题标题】:Seam AutoCreate not working?接缝自动创建不起作用?
【发布时间】:2012-02-15 05:19:58
【问题描述】:

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


}

【问题讨论】:

    标签: java jsf xhtml seam autocreate


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • Seam 文档说,AutoCreate 指定该组件应在被请求时自动实例化,即使@In 未指定 create=true。你的意思是我需要@Create public void init() { rulesValidator = new rulesValidator(); } 如果我这样做,我的 rulesValidator 实例变量在每次调用它们时都会被初始化。
      • 澄清一下,我希望 rulesValidator.setCheckCount(0); 执行,让 NPE 检查他们只会绕过调用。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-30
      • 2018-09-28
      • 1970-01-01
      • 2016-06-25
      • 1970-01-01
      • 2011-06-19
      相关资源
      最近更新 更多