Conversation created until POST
ssamayoagt May 14, 2010 10:40 PMIm doing some simple testing and found that if there is no POST in the WEB tier the conversation is created each time getter method runs.
This is my BB code:
@Named
@ConversationScoped
public class TestList1 implements Serializable {
private static final long serialVersionUID = -4209869420239041827L;
private @Inject
Conversation conversation;
private List<Personal> listaPersonal;
public TestList1() {
}
public List<Personal> getListaPersonal() {
System.out.println("getListaPersonal()");
if (listaPersonal == null) {
System.out.println("getListaPersonal() listaPersonal == null");
conversation.begin();
System.out.println("getListaPersonal() conversation.id " + conversation.getId());
listaPersonal = new ArrayList<Personal>();
for (int i = 0; i < 20; i++) {
Personal p = new Personal();
p.setId(i);
p.setNombre("Empleado " + i);
p.setDias(15);
listaPersonal.add(p);
}
}
return listaPersonal;
}
}
And my view is:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:rich="http://richfaces.org/rich"
xmlns:a4j="http://richfaces.org/a4j">
<body>
<h:form>
<rich:dataTable var="p" value="#{testList1.listaPersonal}" rows="10"
id="lista">
<rich:column>
<f:facet name="header"></f:facet>
<h:selectBooleanCheckbox value="#{p.seleccionado}">
<a4j:support event="onclick" reRender="dias" />
</h:selectBooleanCheckbox>
</rich:column>
<rich:column>
<f:facet name="header">ID</f:facet>
<h:outputText value="#{p.id}" />
</rich:column>
<rich:column>
<f:facet name="header">Nombre</f:facet>
<h:outputText value="#{p.nombre}" />
</rich:column>
<rich:column>
<f:facet name="header">Dias</f:facet>
<h:inputText value="#{p.dias}" required="true" id="dias"
disabled="#{!p.seleccionado}">
<f:convertNumber />
<a4j:support event="onblur" />
</h:inputText>
<rich:message for="dias" />
</rich:column>
<f:facet name="footer">
<rich:datascroller for="lista" />
</f:facet>
<rich:column>
<a4j:commandButton value="Borrar" action="#{testList1.borrar}">
<f:setPropertyActionListener target="#{testList1.personalBorrar}"
value="#{p}" />
</a4j:commandButton>
</rich:column>
</rich:dataTable>
<h:commandButton value="POST" />
<rich:messages />
</h:form>
</body>
</html>
Log for data table navigation is:
getListaPersonal()
getListaPersonal()
getListaPersonal()
getListaPersonal() listaPersonal == null
getListaPersonal() conversation.id 3
getListaPersonal()
getListaPersonal()
getListaPersonal()
getListaPersonal() listaPersonal == null
getListaPersonal() conversation.id 4
getListaPersonal()
getListaPersonal()
getListaPersonal()
getListaPersonal() listaPersonal == null
getListaPersonal() conversation.id 5
getListaPersonal()
getListaPersonal()
Until I click on the button "POST" (which makes post...) the view uses the conversation's BB.
Im doing this on tomcat 6.0.26 + Weld 1.0.1 + mojarra 2.0.2 + facelets 1.1.15
Why conversation is created until POST?
Thanks.
This is my BB code:
@Named
@ConversationScoped
public class TestList1 implements Serializable {
private static final long serialVersionUID = -4209869420239041827L;
private @Inject
Conversation conversation;
private List<Personal> listaPersonal;
public TestList1() {
}
public List<Personal> getListaPersonal() {
System.out.println("getListaPersonal()");
if (listaPersonal == null) {
System.out.println("getListaPersonal() listaPersonal == null");
conversation.begin();
System.out.println("getListaPersonal() conversation.id " + conversation.getId());
listaPersonal = new ArrayList<Personal>();
for (int i = 0; i < 20; i++) {
Personal p = new Personal();
p.setId(i);
p.setNombre("Empleado " + i);
p.setDias(15);
listaPersonal.add(p);
}
}
return listaPersonal;
}
}
And my view is:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:rich="http://richfaces.org/rich"
xmlns:a4j="http://richfaces.org/a4j">
<body>
<h:form>
<rich:dataTable var="p" value="#{testList1.listaPersonal}" rows="10"
id="lista">
<rich:column>
<f:facet name="header"></f:facet>
<h:selectBooleanCheckbox value="#{p.seleccionado}">
<a4j:support event="onclick" reRender="dias" />
</h:selectBooleanCheckbox>
</rich:column>
<rich:column>
<f:facet name="header">ID</f:facet>
<h:outputText value="#{p.id}" />
</rich:column>
<rich:column>
<f:facet name="header">Nombre</f:facet>
<h:outputText value="#{p.nombre}" />
</rich:column>
<rich:column>
<f:facet name="header">Dias</f:facet>
<h:inputText value="#{p.dias}" required="true" id="dias"
disabled="#{!p.seleccionado}">
<f:convertNumber />
<a4j:support event="onblur" />
</h:inputText>
<rich:message for="dias" />
</rich:column>
<f:facet name="footer">
<rich:datascroller for="lista" />
</f:facet>
<rich:column>
<a4j:commandButton value="Borrar" action="#{testList1.borrar}">
<f:setPropertyActionListener target="#{testList1.personalBorrar}"
value="#{p}" />
</a4j:commandButton>
</rich:column>
</rich:dataTable>
<h:commandButton value="POST" />
<rich:messages />
</h:form>
</body>
</html>
Log for data table navigation is:
getListaPersonal()
getListaPersonal()
getListaPersonal()
getListaPersonal() listaPersonal == null
getListaPersonal() conversation.id 3
getListaPersonal()
getListaPersonal()
getListaPersonal()
getListaPersonal() listaPersonal == null
getListaPersonal() conversation.id 4
getListaPersonal()
getListaPersonal()
getListaPersonal()
getListaPersonal() listaPersonal == null
getListaPersonal() conversation.id 5
getListaPersonal()
getListaPersonal()
Until I click on the button "POST" (which makes post...) the view uses the conversation's BB.
Im doing this on tomcat 6.0.26 + Weld 1.0.1 + mojarra 2.0.2 + facelets 1.1.15
Why conversation is created until POST?
Thanks.