EntityHome: No transaction is in progress
asriel Oct 16, 2009 3:01 PMHi everybody,
I'm trying to make a page that allows the user to select an entity from a DataTable and to edit the entity that has been selected through a form.
For persistence I'm using the EntityHome class generated by seam-gen (the entity is Sperimentazione and the class I use for managing the persistence is SperimentazioneHome).
Here is how I do that:
- When the user selects a row on the table, the selection listener is fired and it links the selected entity to the EntityHome instance via .setInstance()
- When the user then clicks the button to make an update, the action listener is fired and it calls the EntityHome method .update()
but then the exception javax.faces.el.EvaluationException: javax.persistence.TransactionRequiredException: no transaction is in progress is raised.
Here is the view:
<ice:panelGroup>
<ice:form>
<ice:dataTable var="_sperimentazione" value="#{sperimentazioneList.dataModel}">
<ice:column>
<ice:rowSelector value="#{_sperimentazione.selected}"
selectionListener="#{testTableSelection.selectionListener}"/>
<f:facet name="header"><ice:outputText value="id"/></f:facet>
<ice:outputText value="#{_sperimentazione.id}"/>
</ice:column>
<ice:column>
<f:facet name="header"><ice:outputText value="idAmministrativo"/></f:facet>
<ice:outputText value="#{_sperimentazione.idAmministrativo}"/>
</ice:column>
<ice:column>
<f:facet name="header"><ice:outputText value="Tipo di sperimentazione"/></f:facet>
<ice:outputText value="#{_sperimentazione.clsSperimentazione.tipo}"/>
</ice:column>
<ice:column>
<f:facet name="header"><ice:outputText value="Descrizione"/></f:facet>
<ice:outputText value="#{_sperimentazione.descrizione}"/>
</ice:column>
</ice:dataTable>
</ice:form>
</ice:panelGroup>
<ice:panelGroup>
<ice:form>
<ice:outputLabel for="sperimId" value="id:"/>
<ice:outputLabel id="sperimId" value="#{sperimentazioneHome.instance.id}"/>
<h:message for="sperimId"/> <br />
<ice:outputLabel for="sperimIdAmministr" value="id Amministrativo:"/>
<ice:inputText id="sperimIdAmministr" value="#{sperimentazioneHome.instance.idAmministrativo}"/>
<h:message for="sperimIdAmministr"/> <br />
<ice:outputLabel for="sperimTipo" value="Tipo di sperimentazione:"/>
<ice:selectOneMenu id="sperimTipo" value="#{sperimentazioneHome.instance.clsSperimentazione}">
<s:selectItems value="#{clsSperimentazioneList.resultList}" itemValue="#{_tipoSperimentazione}"
var="_tipoSperimentazione" label="#{_tipoSperimentazione.tipo}"/>
<s:convertEntity />
</ice:selectOneMenu> <h:message for="sperimTipo"/> <br />
<ice:outputLabel for="sperimDescriz" value="Descrizione:"/>
<ice:inputText id="sperimDescriz" value="#{sperimentazioneHome.instance.descrizione}"/>
<h:message for="sperimDescriz"/> <br />
<ice:commandButton value="Modifica" action="#{sperimentazioneHome.update}"/>
</ice:form>
</ice:panelGroup>And here is the controller that hosts the listeners:
@Name("testTableSelection")
public class TestTableSelectionAct {
@In(value = "sperimentazioneList")
private SperimentazioneList sperimList;
@In
private SperimentazioneHome sperimentazioneHome;
public TestTableSelectionAct() {
}
public void selectionListener(RowSelectorEvent rsevt) {
sperimentazioneHome.setInstance(sperimList.getDataModelSelection());
}
@TransactionAttribute
public void updateCommandListener(ActionEvent acevt) {
sperimentazioneHome.update();
}
public SperimentazioneHome getSperimHome() {
return sperimentazioneHome;
}
public void setSperimHome(SperimentazioneHome sperimHome) {
this.sperimentazioneHome = sperimHome;
}
}
The SEAM component SperimentazioneHome has been set with a Page scope.
Do you have any idea of how to fix this?
(The @TransactionAttribute annotation is a last minute attempt to make things working, but it changed nothing)
Thank you.