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 클래스는 정상적으로 작동합니다. 뷰잉 된 빈을 사용하면서 누군가 행을 선택하도록 도울 수 있습니까?
@Named를 managedBean, component ...로 변경하면 – Darka
@Darka import javax.faces.bean.ViewScoped;를 사용하고 제안한대로 CDI 어노테이션을 JSF로 변경했습니다. 대신 import javax.faces.view.ViewScoped; 하지만 데이터 테이블조차도로드되지 않습니다. 결과는 null poiter 예외입니다. – gsk
web.xml 파일로 무엇인가해야합니까? 그것이 생성 된 이후로 나는이 파일을 수정하지 않았기 때문에. – gsk