2

私はまだPAGECONVERSATION(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 つの問題である場合。

4

0 に答える 0