私はまだPAGE
とCONVERSATION
(temp) スコープについて混乱しています。多分私はここで助けを得ます。私の知るPAGE
限り、スコープにアウトジェクトされた変数は、ユーザーが同じページをポストバックするだけで有効です。代わりに、一時的なCONVERSATION
スコープは、次のページへのリダイレクト後も存続します。これは、私を混乱させる 2 つの効果の小さな例です。
まず、コンポーネントとアウトジェクションがCONVERSATION
スコープ内にあり、tempUser
データが jsf ページに表示されます。しかし、その jsf ページから呼び出された save メソッドでは、注入されたのtempUser
は null です。なんで?
次に、同じことを行ってコンポーネントと @In/@Outs スコープをPAGE
スコープに変更すると、ポストバックで正しく挿入されますが、 -method onが呼び出されtempUser
ても、なんらかの理由で保存されません。それとも、homeEntities をそのように使用することに問題がありますか (DAO ラッパーとしてのみ使用するという考えです)。super.update()
userHome
@Name("userAction")
@Scope(ScopeType.CONVERSATION)
public class UserAction implements Serializable {
private static final long serialVersionUID = -4852371546895918692L;
@In(create = true)
private UserHome userHome;
@Out(scope = ScopeType.CONVERSATION)
@In(required = false,scope = ScopeType.CONVERSATION)
User tempUser;
@RequestParameter
private Long userId;
@Factory("tempUser")
public User getUser() {
if (tempUser == null) {
userHome.setUserId(userId);
tempUser = userHome.getInstance();
userHome.clearInstance();
}
return tempUser;
}
public void save() {
userHome.setInstance(tempUser);
userHome.update();
}
}
xhtml には aa:form が含まれています。
<a:commandButton
id="update"
styleClass="button admin"
action="#{userAction.save}"
value="#{messages['user.action.update']}"/>
返信ありがとうございます。申し訳ありませんが、これが 1 つの 2 つの問題である場合。