2013-09-28 5 views
0

내 응용 프로그램에서는 ViewScoped Bean을 사용하고 primefaces datatable에서 행을 선택하면 선택된 행을 표시하지 않습니다. 그러나 Bean을 SessionScoped Bean으로 변경하면 선택한 행이 완벽하게 표시됩니다.Primefaces datatable 행 선택이 뷰 스코프에서 작동하지 않습니다.

내 코드는 아래와 같습니다.

<h:form id="form"> 
<p:growl id="msgs" showDetail="true" /> 
<p:dataTable var="pMData" rowIndexVar="rowIndex" value="#  {managedBean.dataModel}" selectionMode="single" paginator="true" rows="100" 
widgetVar="pMTable" emptyMessage="No Records Found."  filteredValue="#{managedBean.filteredRecords}" selection="#{managedBean.selectedRecord}"  rowKey="#{pMData.cellid}"> 

<p:ajax event="rowSelect" listener="#{managedBean.onRowSelect}" 
update=":form:display :form:msgs" oncomplete="moreviewDialog.show()" /> 
<p:ajax event="rowUnselect" listener="#{managedBean.onRowUnselect}"    update=":form:msgs"/> 
<p:column headerText="Cell Name" filterBy="#{pMData.cellid}"    filterStyle="display:none" > 
<h:outputText value="#{pMData.modifiedCellID}" /> 
    </p:column> 
    </p:dataTable> 


    <p:dialog header="History Data" widgetVar="moreviewDialog" resizable="false" id="moreviewDlg" 
    showEffect="fade" hideEffect="explode" modal="true"> 

    <h:panelGrid id="display" columns="2" cellpadding="4" style="margin:0 auto;"> 

    <p:lineChart id="category" value="#    {managedBean.createCategoryModel(managedBean.selectedRecord.cellid)}" legendPosition="e" 
title="NodeB Throughput(kbit/s)" minY="0" maxY="5000" style="height:300px;margin-top:20px"/> 


    </h:panelGrid> 
    </p:dialog> 
    </h:form> 

내 managedBean CDI는 다음과 같습니다.

@Named(value = "managedBean") 
    @ViewScoped 
    public class ManagedBean implements Serializable { 
public void setSelectedRecord(PMData selectedRecord1){ 
    this.selectedRecord=selectedRecord1; 

} 

public PMData getSelectedRecord(){ 

    return selectedRecord; 
} 
public void onRowSelect(SelectEvent event) { 


    FacesMessage msg = new FacesMessage("NodeB Selected", String.valueOf(((PMData)  event.getObject()).getCellid())); 

    FacesContext.getCurrentInstance().addMessage(null, msg); 

} 

public void onRowUnselect(UnselectEvent event) { 
FacesMessage msg = new FacesMessage("Row Unselected",((PMData)  event.getObject()).getCellid()); 

FacesContext.getCurrentInstance().addMessage(null, msg); 
} 

public PMDataModel getDataModel() { 
    return dataModel; 
} 
public CartesianChartModel createCategoryModel(String key) { .....} 
public List<PMData> getFilteredRecords() { 
    return filteredRecords; 
} 

public void setFilteredRecords(List<PMData> filteredRecords) { 

//  System.out.println("came "); 
    this.filteredRecords = filteredRecords; 
} 
} 

이고 PMData 및 PMDataModel 클래스는 정상적으로 작동합니다. 뷰잉 된 빈을 사용하면서 누군가 행을 선택하도록 도울 수 있습니까?

+0

@Named를 managedBean, component ...로 변경하면 – Darka

+0

@Darka import javax.faces.bean.ViewScoped;를 사용하고 제안한대로 CDI 어노테이션을 JSF로 변경했습니다. 대신 import javax.faces.view.ViewScoped; 하지만 데이터 테이블조차도로드되지 않습니다. 결과는 null poiter 예외입니다. – gsk

+0

web.xml 파일로 무엇인가해야합니까? 그것이 생성 된 이후로 나는이 파일을 수정하지 않았기 때문에. – gsk

답변

0

답변을 찾은 것 같습니다. 대화 상자에 오류가 있습니다. 대화 상자에 dynamic = true를 넣었습니다. 이제 완벽하게 작동합니다.