2012-04-02 4 views
2

jboss 6.1에서 primefaces 3.2 및 mojarra 2.1.7을 사용하고 있습니다. 내가 게으른 로딩 datatable을 구축하려고합니다. datatable 열 중 하나에서 나는 edit 메서드를 호출하기위한 commandlink를 가지고있다. 만약 bean이 conversation 범위라면, edit 메소드는 호출되지 않는다. 범위가 지정된 뷰이면 호출됩니다. 나는 게으른 로딩 데이터 테이블로 작업하기 위해 대화 범위의 빈을 가질 수 없을까?primefaces, lazy load 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 코드를 넣지 마십시오. 생성자가 언제 호출되는지 (그리고 얼마나 자주) 보장되지 않으므로 생성자에 EJB 코드를 넣지 마십시오. 대신 @PostConstruct을 사용하는 것이 좋습니다.

1

내 문제는 내가 대화 ID를 올바르게 전파하지 못했다는 것이 었습니다.