Dynamic UI Components and Seam Managed Persistent Context.Bug ?
amontobin Jun 20, 2008 1:05 AMHi Seam Users,
I'm trying to create a dynamic interface with buttons and input create on the fly. I've got a controller which is responsible to build the interface and to respond to different actions. My problem is that i cannot use a seam manage persistent context :
The Exception is : @In attribute requires non-null value: sayhello.entityManager
I try with a static page (CommandButton and AjaxCommandButton)
1. Persistent Context OK
2. Persistent Context EXTENDED OK
3. In (SMPC) OK
WIth a dynamic page :
1. Persistent COntext OK
2. Persistent Context EXTENDED OK
3. In (SMPC) NOK. Exception
Have you any ideas to help ?
Thank you very much,
Sebastien
Seam 2.0.1.SP1
Here is the code of the controller :
@Stateful @Name("sayhello") @Scope(SESSION) public class SayHelloController implements SayHelloControllerLocalInterface { @In EntityManager entityManager; private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getMessage() { return "Hello " + getName(); } public String submit() { testpersist(); return null; } public String back() { return null; } public String testpersist() { SiteImpl site = new SiteImpl(); site.setName("test"); site.setUrl("test"); entityManager.persist(site); return null; } public void test() { testpersist(); } public void processAction(ActionEvent e) { testpersist(); } private HtmlPanelGrid grid; public HtmlPanelGrid getGrid() { if (grid == null) { Application app = FacesContext.getCurrentInstance().getApplication(); grid = (HtmlPanelGrid) app.createComponent(HtmlPanelGrid.COMPONENT_TYPE); grid.setStyle("width : 100%;"); grid.setColumns(1); grid.getChildren().add(getTestButton()); } return grid; } public void setGrid(HtmlPanelGrid grid) { this.grid = grid; } private HtmlAjaxCommandButton testButton; public HtmlAjaxCommandButton getTestButton() { if (testButton == null) { // Button RemoveFromCart testButton = HtmlAjaxCommandButtonFactory.createRemoveCartButton(); Faces.setMethodExpression(testButton, "#{sayhello.testpersist}", "actionExpression", String.class, new Class[] {}); } return testButton; } public void processAction(javax.faces.event.ActionEvent event) throws javax.faces.event.AbortProcessingException { testpersist(); } public String getBinding() { return "sayhello"; } @Remove public void destroy() { } }
Here is the code of the page :
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core" xmlns:s="http://jboss.com/products/seam/taglib" xmlns:c="http://java.sun.com/jstl/core" xmlns:a4j="http://richfaces.org/a4j"> <head> Name! </head> <body> <f:view> <h:form id="form"> <h:panelGrid binding="#{sayhello.grid}"/> </h:form> </f:view> </body> </html>