Can't dynamically create RichFaces component in Seam
jackyeh.jao.chin.gmail.com Apr 30, 2008 6:00 AMI 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.