4 Replies Latest reply on Jan 6, 2010 9:25 AM by blabno

    Can't dynamically create RichFaces component in Seam

    Jack Yeh Newbie

      I create a new EAR project into Eclipse by seam-gen with RichFaces support. Then I create a session bean which dynamically generates a HtmlOutputText and a RichFaces HtmlPanel object.


      Session bean code :


      import javax.faces.component.UIComponent;
      import javax.faces.component.html.HtmlOutputText;
      import org.richfaces.component.html.HtmlPanel;
      public class HomePage {
           private UIComponent layout = null;
           public HomePage() {
           }
           public UIComponent getLayout() {
                return layout;
           }
      
           public void setLayout(UIComponent layout) {
                this.layout = layout;
      
                HtmlOutputText text = new HtmlOutputText();
                text.setId("TextComponent");
                text.setValue("TextComponent");
                layout.getChildren().add(text);
      
                HtmlPanel panel = new HtmlPanel();
                panel.setId("Panel");
                layout.getChildren().add(panel);
           }
      }
      



      home.xhtml


      <!DOCTYPE composition PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
                            "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
      <ui:composition xmlns="http://www.w3.org/1999/xhtml" xmlns:s="http://jboss.com/products/seam/taglib"
           xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:f="http://java.sun.com/jsf/core"
           xmlns:h="http://java.sun.com/jsf/html" xmlns:a4j="http://richfaces.org/a4j" xmlns:rich="http://richfaces.org/rich"
           template="layout/template.xhtml">
      
           <ui:define name="body">
                <a4j:form id="mainForm">
                     <rich:panel id="mainPanel" binding="#{homePage.layout}">
                          <h:outputText value="   Static text." />
                     </rich:panel>
                </a4j:form>
           </ui:define>
      </ui:composition>



      The first problem I met was java.lang.NoClassDefFoundError: org/richfaces/component/html/HtmlPanel.


      I think this exception probably indicates missing some libraries, thus I put richfaces-ui.jar into the root of the jar directory of the ear archive.


      It works, but then I face to the second problem: java.lang.IllegalArgumentException: Component mainForm:Panel not instance of org.richfaces.component.UIPanel.


      I tried to debug the problem, but the exception seems not causing by my code but inside of the Seam or RichFaces.


      When I comment out the last line of the session bean code, the page shows up as expected with the dynamic created HtmlOutputText object.


      layout.getChildren().add(panel);




      I spend many days to solve this problem but still failed. I'll be very appreciate who can help me. Thank you very much in advance.