シームコンポーネントを別のコンポーネントに注入しようとしていますが、それを自動作成しています。しかし何らかの理由で、注入されたシーム成分がNPEを投げる。まさにその偽の手段を必要Seam AutoCreateが機能しません。
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;
}
}
Seam docs say、AutoCreate @Inがcreate = trueを指定していない場合でも、要求されるたびにこのコンポーネントを自動的にインスタンス化する必要があることを指定します。 '@作成する必要があるのですか? public void init(){ rulesValidator = new rulesValidator(); } 'これを行うと、私はrulesValidatorのインスタンス変数を呼び出すたびに初期化されます。 –
明確にするために、 'rulesValidator.setCheckCount(0);'を実行して、NPEチェックを行い、呼び出しをバイパスするだけです。 –