Error with Seam converations
vaidyaranju Aug 25, 2009 4:15 PMHello,
I am new to Seam and currently working on an application using Seam 2.1.2 deployed on JBoss 4.2.2 . I am trying to implement a flow where the first page shows the list of available templates. Clicking on any of the available templates takes the user to the edit screen with update option. I have tried to implement this using Seam conversation with a POJO Action Handler.
Here is the code snip of the action
@Name("templateAction")
@Restrict("#{s:hasRole('Admin')}")
@Scope(ScopeType.CONVERSATION)
public class TemplateAction implements Serializable
{
/**
*
*/
private static final long serialVersionUID = 1L;
@Create
public void init() {
getLanguages();
}
@Logger private Log log;
@In
Users user;
@In("#{commonService}")
CommonServicesImpl commonServiceImpl;
@DataModel
private List<Template> templateList = null;
@DataModelSelection
Template templateSelection;
Template templateObject;
public Template getTemplateObject() {
return templateObject;
}
public void setTemplateObject(Template templateObject) {
this.templateObject = templateObject;
}
@Factory(value = "templateList")
@Begin(join=true)
public void getTemplates()
{
log.info("TemplateAction.getTemplates action called ");
try {
templateList = commonServiceImpl.getTemplateList();
log.info("Searchlist Size :" + templateList.size());
} catch (ServiceException exception) {
log.error(exception);
}
}
public String editTemplate()
{
log.info("templateAction.editTemplate action called");
templateObject = templateSelection;
return "edit";
}
@End
public String updateTemplate()
{
log.info("templateAction.updateTemplate action called");
return "success";
}
}The conversation begins with the search and ends with update or cancel.
Here is the snip of edit xhtml
<h:panelGrid id="editPanel" columns="2" rowClasses="prop" rendered="#{!empty templateAction.templateObject.id}" style="width : 600px;">
<h:outputLabel for="template" styleClass="label">
<h:outputText id="templateText"
value="#{messages['template.template']}" />
</h:outputLabel>
<s:decorate>
<f:facet name="afterInvalidField">
<s:message styleClass="requiredMsg" />
</f:facet>
<h:inputText id="templateValue" required="true"
value="#{templateAction.templateObject.name}" styleClass="text" />
</s:decorate>
<h:outputLabel for="headerURL" styleClass="label">
<h:outputText id="headerURLText"
value="#{messages['template.headerurl']}" />
</h:outputLabel>
<s:decorate>
<f:facet name="afterInvalidField">
<s:message styleClass="requiredMsg" />
</f:facet>
<h:inputText id="headerURLValue" required="true"
value="#{templateAction.templateObject.headUrl}" styleClass="text" />
</s:decorate>
<f:facet name="footer">
<h:panelGroup style="display:block; text-align:right">
<rich:separator />
<h:commandButton id="templateEdit" styleClass="actionbutton"
value="Update Template" action="#{templateAction.updateTemplate}">
</h:commandButton>
</h:panelGroup>
</f:facet>
</h:panelGrid>Everything works fine till the edit page, however when I click update, throws the error
14:21:54,040 WARN [lifecycle] /pages/editTemplate.xhtml @42,74 value="#{templateAction.templateObject.id}": Target Unreachable, 'templateObject' returned null on 'TemplateAction_$$_javassist_seam_3'
javax.el.PropertyNotFoundException: /pages/editTemplate.xhtml @42,74 value="#{templateAction.templateObject.id}": Target Unreachable, 'templateObject' returned null on 'TemplateAction_$$_javassist_seam_3'
and shows the same page with all values blank.
With some debugging what I find is that another instance of the templateAction is created when I click Update
and then destroyed , even though the first (original)instance is still available in the conversation context.
14:21:24,650 INFO [TemplateAction] ******TemplateAction Created******:TemplateAction@4b9e08
14:21:24,650 INFO [TemplateAction] TemplateAction.getTemplates action called - Search called
14:21:24,682 INFO [TemplateAction] Searchlist Size :1
14:21:24,682 INFO [TemplateAction] CONVERSATION Started
14:21:24,682 INFO [TemplateAction] id: 7; isLongRunning true; viewId: /pages/template.xhtml
14:21:31,556 INFO [TemplateAction] templateAction.editTemplate action called - Edit page
14:21:53,993 INFO [TemplateAction] ******TemplateAction Created******:TemplateAction@15f7447 - when "Update" is clicked
14:21:54,040 WARN [lifecycle] /pages/editTemplate.xhtml @42,74 value="#{templateAction.templateObject.id}": Target Unreachable, 'templateObject' returned null on 'TemplateAction_$$_javassist_seam_3'
javax.el.PropertyNotFoundException: /pages/editTemplate.xhtml @42,74 value="#{templateAction.templateObject.id}": Target Unreachable, 'templateObject' returned null on 'TemplateAction_$$_javassist_seam_3'
14:21:54,040 ERROR [lifecycle] JSF1054: (Phase ID: PROCESS_VALIDATIONS 3, View ID: /pages/editTemplate.xhtml) Exception thrown during phase execution: javax.faces.event.PhaseEvent[source=com.sun.faces.lifecycle.LifecycleImpl@18925c9]
14:21:54,072 INFO [TemplateAction] ******TemplateAction Destroyed******:TemplateAction@15f7447Any ideas why this is happening ? Is this the reason for the error or is it something else that I am missing ?
Any help will be greatly appreciated.
-Thanks