I don't understand why the db was hit for every single ajax request.
This is my SFSB:
@Stateful
@Name("employees")
@Scope(ScopeType.CONVERSATION) // cannot be page-scoped
public class EmployeesImpl implements Employees {
@Logger private Log log;
@PersistenceContext private EntityManager entityManager;
@DataModel(value="allEmployees", scope=ScopeType.PAGE) protected List<Employee> allEmployees;
private Employee selectedEmployee;
public void findAllEmployees() {
allEmployees = entityManager.createQuery("select e from Employee e").getResultList();
}
public void selectEmployee(Employee e) {
selectedEmployee = e;
}
public void selectEmployee1() {
log.debug("hic hic hic");
}My test.xhtml:
<a4j:form>
<h:dataTable value="#{allEmployees}" var="employee" width="840">
<h:column>
<f:facet name="header">ID</f:facet>
<a4j:commandLink value="#{employee.id}" action="#{employees.selectEmployee1}"/>
<h:outputText value=" (call a non-parameter method)" style="font-style: italic;"/>
</h:column>
<h:column>
<f:facet name="header">First Name</f:facet>
<a4j:commandLink value="#{employee.firstName}" action="#{employees.selectEmployee(employee)}"/>
</h:column>
</h:dataTable>
</a4j:form>
My pages.xml:
<page view-id="/test.xhtml" action="#{employees.findAllEmployees}" />Clicking on both <a4j:commandLink> causes a hit to the db.
I think, those clicks create ajax requests only. So, why is the method findAllEmployees executed for every single request?