I had problems when I tried to use this example as well. Look at the method
signatures. If I remember correctly the functions are not being called
correctly. E.G.
Method signature:
public void encodeBegin(FacesContext context, UIComponent component)....
Method Usage in the example:
{...
component.encodeBegin(context);
...}
Method should be:
{...
encodeBegin(context, component)
...}
I believe this is correct. There are other places in the code like this as
well. I believe this is a correct solution/
---------
Eric Kelm
Developer, VSG Worldwide LLC
Longview, TX 75601
->-----Original Message-----
->From: Curtney Jacobs [mailto:[EMAIL PROTECTED]
->Sent: Thursday, July 28, 2005 3:46 AM
->To: [EMAIL PROTECTED]
->Cc: MyFaces Discussion
->Subject: Re: ClassCastException calling encodeBegin
->
->The following is an abbreviated (My stacktrace is really long) version
->of my stacktrace:
->
->java.lang.ClassCastException: com.oim.faces.custom.tabbedpane.UITabLabel
-> at
->org.apache.myfaces.renderkit.html.HtmlLinkRendererBase.renderJavaScriptAnc
->horStart(HtmlLinkRendererBase.java:323)
-> at
->org.apache.myfaces.renderkit.html.HtmlLinkRendererBase.renderCommandLinkSt
->art(HtmlLinkRendererBase.java:215)
-> at
->org.apache.myfaces.renderkit.html.HtmlLinkRendererBase.encodeBegin
->(HtmlLinkRendererBase.java:146)
-> at javax.faces.component.UIComponentBase.encodeBegin
->(UIComponentBase.java:317)
->at com.oim.faces.custom.tabbedpane.TabbedPaneRenderer.encodeRecursive
->(TabbedPaneRenderer.java:406)
->
->
->As you can see from the above, what triggers the exception is when I
->call encodeRecursive in my renderer, which calls encodeBegin() method on
->my component (UITabLabel). See previous post for implementation details.
->
->_Curtney
->
->
->On Thu, 2005-07-28 at 10:25 +0200, Martin Marinschek wrote:
->> Find out which classes are involved in the failed casting and then get
->> back to us.
->>
->> regards,
->>
->> Martin
->>
->> On 7/28/05, Curtney Jacobs <[EMAIL PROTECTED]> wrote:
->> Greetings!
->>
->> I have copied a custom component from "JavaServer Faces" by
->> O'Reilly to
->> use in my myfaces application and I am getting
->> ClassCastException
->> whenever I call "component.encodeBegin(context)": The
->> following code is
->> what throws the ClassCastException:
->>
->> Calling code:
->>
->> UITabLabel tabLabel = (UITabLabel)child.getFacet("label");
->> encodeRecursive(context, tabLabel);
->>
->> Called Method implementation:
->>
->> private void encodeRecursive (FacesContext context,
->> UIComponent
->> component) throws IOException {
->> if (!component.isRendered()) {
->> return;
->> }
->> //throws ClassCastException
->> component.encodeBegin (context);
->>
->> if (component.getRendersChildren()) {
->> component.encodeChildren(context);
->> } else {
->> Iterator it = component.getChildren
->> ().iterator();
->> while (it.hasNext()) {
->> UIComponent child =
->> (UIComponent)it.next();
->> encodeRecursive(context,
->> child);
->> }
->> }
->> component.encodeEnd(context);
->> }
->>
->>
->> The following is the custom component from the Book:
->>
->> public class UITabLabel extends UICommand {
->>
->> public static final String COMPONENT_TYPE =
->> "com.oim.faces.TabLabel";
->> public static final String COMPONENT_FAMILY =
->> "javax.faces.Command";
->>
->> public UITabLabel () {
->> super();
->> setRendererType ("javax.faces.Link");
->> }
->>
->> public String getFamily () {
->> return COMPONENT_FAMILY;
->> }
->>
->> public void broadcast (FacesEvent event) {
->> if (event instanceof ActionEvent) {
->> processAction((ActionEvent)event);
->> }
->> }
->>
->>
->> private void processAction (ActionEvent event) {
->> UIComponent panelTab = getParent();
->> UIComponent panelTabbedPane =
->> panelTab.getParent();
->> Iterator it = panelTabbedPane.getChildren
->> ().iterator();
->> while (it.hasNext()) {
->> UIComponent panel =
->> (UIComponent)it.next();
->> if (panel.equals(panelTab)) {
->> panel.setRendered(true);
->> } else {
->> panel.setRendered(false);
->> }
->> }
->> }
->>
->> public MethodBinding getAction () {
->> return null;
->> }
->>
->> public void setAction (MethodBinding action) {
->> throw new UnsupportedOperationException();
->> }
->>
->> public MethodBinding getActionListener () {
->> return null;
->> }
->>
->> public void addActionListener (ActionListener
->> listener) {
->> throw new UnsupportedOperationException();
->> }
->>
->> public ActionListener[] getActionListeners () {
->> return new ActionListener[0];
->> }
->>
->> public void removeActionListener (ActionListener
->> listener) {
->> throw new UnsupportedOperationException ();
->> }
->>
->> }
->>
->> Any Ideas?
->>
->> Curtney
->>
->>