7 Replies Latest reply on Oct 2, 2008 11:26 PM by amontobin

    Dynamic UI Components and Seam Managed Persistent Context.Bug ?

    amontobin Newbie

      Hi 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>