Merhaba. Primefaces ile datatable kullanirken anlamadigim olaylar oluyor.Ben projeyi refresh yaparken aynı(listEmpDetail ) method 2 kez calisiyor.Datatablenin rowSelection özelliğini kullandığım zaman ise listEmpDetail methodu defalarca çalışıyor ,halbuki o methodun çalışmaması gerek.Projeye bu linkden ulaşa bilirsiniz : LINK
Yardımcı olursanız sevinirim.Teşekkürler Kaynak kod :
<h:form id="fsearch">
<p:growl id="growl5" showDetail="true" life="10000" />
<p:dataTable var="e" value="#{ec.employee}"
id="dypdatatable" scrollable="true" scrollHeight="600" scrollWidth="1500"
selection="#{ec.selectedEmp}" selectionMode="single" rowKey="#{e.id}"
>
<f:facet name="header" >
List of Employee
</f:facet>
<p:ajax event="rowSelect" listener="#{ec.onRowSelect}" update=":fsearch:growl5" />
<p:column headerText="Id" style="width:50px;" filterStyle="width: 45px;" filterBy="#{e.id}" sortBy="#{e.id}">
<h:outputText value="#{e.id}" />
</p:column>
<p:column headerText="Name" style="width:350px;" filterStyle="width: 345px;" filterBy="#{e.name}" sortBy="#{e.name}">
<h:outputText value="#{e.name}" />
</p:column>
<p:column headerText="Surname" style="width:60px;" filterStyle="width: 55px;" filterBy="#{e.surname}" sortBy="#{e.surname}">
<h:outputText value="#{e.surname}" />
</p:column>
<p:column headerText=" Country" style="width:60px;" filterStyle="width: 35px;" filterBy="#{e.country}" sortBy="#{e.country}">
<h:outputText value="#{e.country}" />
</p:column>
<p:column headerText="City" style="width:30px;" filterStyle="width: 25px;" filterBy="#{e.city}" sortBy="#{e.city}">
<h:outputText value="#{e.city}" />
</p:column>
</p:dataTable>
</h:form>
Database işləmi :
public List<empdetail> listEmpDetail() { try { System.out.println("listEmpDetail girir connect olmayib - "+new Date()); connection();
System.out.println("listEmpDetail girir - "+new Date());
System.out.println();
String sql = "SELECT * from emp_detail";
System.out.println(sql+"-"+new Date());
psmt = connection.prepareStatement(sql);
resultSet = psmt.executeQuery();
resultSet.last();
System.out.println(resultSet.getRow()+" - "+new Date());
resultSet.first();
System.out.println(resultSet.getRow()+" - "+new Date());
List<EmpDetail> data = new ArrayList<EmpDetail>();
while (resultSet.next()) {
EmpDetail p = new EmpDetail();
p.setId(resultSet.getInt(1));
p.setName(resultSet.getString(2));
p.setSurname(resultSet.getString(3));
p.setCountry(resultSet.getString(4));
p.setCity(resultSet.getString(5));
data.add(p);
}
System.out.println("listEmpDetail return - "+new Date());
return data;
} catch (Exception e) {
e.printStackTrace();
return null;
} finally {
close();
}
}
Managed Bean :
@ManagedBean(name = "ec") @javax.faces.bean.SessionScoped public class EmployeeController implements Serializable {
private List<EmpDetail> employee= new ArrayList<EmpDetail>();
private DbSQL db = new DbSQL();
private EmpDetail selectedEmp;
public EmployeeController() {
}
public List<EmpDetail> getEmployee() {
employee = db.listEmpDetail();
return employee;
}
public void setEmployee(List<EmpDetail> employee) {
this.employee = employee;
}
public EmpDetail getSelectedEmp() {
return selectedEmp;
}
public void setSelectedEmp(EmpDetail selectedEmp) {
this.selectedEmp = selectedEmp;
}
public void onRowSelect(SelectEvent event) {
System.out.println("----- Secilenenin Idsi : "+String.valueOf(((EmpDetail) event.getObject()).getId())+"--------");
FacesMessage msg = new FacesMessage("Employee Selected", String.valueOf(((EmpDetail) event.getObject()).getId()));
FacesContext.getCurrentInstance().addMessage(null, msg);
}
public void onRowUnselect(UnselectEvent event) {
System.out.println("----- Secilenenin Idsi : "+String.valueOf(((EmpDetail) event.getObject()).getId())+"--------");
FacesMessage msg = new FacesMessage("EmpDetail UNSelected", String.valueOf(((EmpDetail) event.getObject()).getId()));
FacesContext.getCurrentInstance().addMessage(null, msg);
}
}