2012-04-02 52 views
2

我正在使用jboss 6.1的primefaces 3.2和mojarra 2.1.7。我正在嘗試構建一個懶加載數據表。在其中一個數據表列中,我有一個命令鏈接來調用編輯方法。如果我的bean的對話範圍,編輯方法不會被調用。如果它是視圖範圍,那麼它會被調用。我不能有一個對話範圍的bean來使用懶加載數據表?primefaces,延遲加載數據表和jsf @conversation作用域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

嗯,當然應該工作。您的代碼沒有任何明顯的錯誤,但我懷疑您提供的代碼段中包含一些「嘗試錯誤」歷史記錄...... ;-)

嘗試調試對話並查看哪個對話已處理什麼時候)。你是否正確傳播了對話ID?

當您編寫ViewScoped工程時 - 您是否包含Seam 3以將JSF範圍橋接到CDI,還是可以混合使用JSF和CDI範圍?

並且:不要在構造函數中放入任何EJB代碼,因爲在調用這個函數的時候(以及頻率)您沒有任何擔保。最好使用@PostConstruct代替。

1

我的問題是我沒有正確傳播對話ID。