2012-04-02 13 views
2

jboss 6.1でprimefaces 3.2とmojarra 2.1.7を使用しています。私は怠惰なローディングdatatableを構築しようとしています。データテーブルの列の1つに、編集メソッドを呼び出すためのコマンドリンクがあります。 Beanが会話スコープである場合、editメソッドは呼び出されません。スコープの範囲であれば、呼び出されます。私は怠惰なローディングデータテーブルで作業するために会話スコープBeanを持っていませんか?primefaces、lazy loading datatableとjsf @conversation scope bean

@Named("userBean") 
@Stateful 
@ConversationScoped 
@LoggedIn 
public class UserBean implements Serializable, UserBeanLocal { 

    private static final long serialVersionUID = 1L; 

    @Inject 
    private Conversation conversation; 
    @EJB 
    private UserManagerBeanLocal userController; 
    @Inject 
    private transient FacesContext context; 

    private User user; 

    private LazyUserDataModel lazyModel; 

    public UserBean() { 
     user = new User(); 
    } 

    @Override 
    @PostConstruct 
    public void createLazyDataModel() { 
     setLazyModel(new LazyUserDataModel(userController)); 
    } 

    @Override 
    @PrePassivate 
    public void ejbPassivate(){ 
     context = null; 
    } 

    @Override 
    @PostActivate 
    public void ejbActivate() { 
    } 

    @Override 
    public String create() { 
     this.conversation.begin(); 
     return "create"; 
    } 


    @Override 
    public String edit() 
    { 
     System.out.println("editing user"); 
     return "create"; 
    } 

} 

<h:form> 
.... 
<p:dataTable id="userTable" var="usr" value="#{userBean.lazyModel}" 
      paginator="true" 
      paginatorTemplate="{FirstPageLink} {PreviousPageLink} {CurrentPageReport} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}" 
      rowsPerPageTemplate="5,10,15" paginatorPosition="bottom" rows="10" 
      currentPageReportTemplate="{currentPage} de {totalPages}"> 
      <p:column headerText="Username"> 
       <h:outputText value="#{usr.name}" /> 
      </p:column> 
      <p:column> 
       <p:commandLink value="Edit" action="#{userBean.edit}" actionListener="#{userBean.update}" update="userTable" /> 
      </p:column> 

     </p:dataTable> 
</h:form> 

誰も助けることができますか?

おかげ

ケリー

答えて

3

まあ、それは確かにべき作品。明らかにコードに間違いはありませんが、スニペットから「試行錯誤」の履歴があると思われます... ;-)

対話をデバッグし、どの会話が対処されているかを確認してくださいといつ)。 conversation-idを正しく伝播していますか?

ViewScopedを書くときにJSFスコープをCDIにブリッジするためにSeam 3を含めましたか、JSFスコープとCDIスコープを混在させることができますか?

And:コンストラクタには、このコードが呼び出されるとき(およびその頻度)の保証がないため、EJBコードを入れないでください。代わりに@PostConstructを使用する方がよいでしょう。

1

私の問題は、会話IDを正しく伝播していないということでした。