Re: How to separate Models from the main Program?

Jacob Kjome <[email protected]>
Newsgroups gmane.comp.java.enhydra.barracuda.general
Message-ID <[email protected]>
Hi Damar,

Well, I don't know why changing from private to public would have made a 
difference.  Other than that, the obvious reason you got the null pointer 
exception is that you pre-set the XMLCFactory object to null but never 
check for it being null before using it in HeadFoot.java.  You did check 
for null in MainDam.java, but since you split the files apart, you will 
have to check for null in all files.  The only reason I can think of that 
it started working is that you actually changed it to check for null, 
didn't realize that, and then attributed the success to the change of 
private to public which, in reality, had nothing at all to do with the success.

Jake

At 03:17 PM 4/25/2003 +0800, you wrote:
>Hi,
>It is me again, replying to my own message.
>
>I now managed to make it work, by declaring xmlcFactory variable as public
>static in MainDam.java, and use that variable in MenuDam.java and
>HeadFoot.java as MainDam.xmlcFactory.
>
>Why this works, but not my previous approach?
>
>Thanks.
>
>Damar
>
>
>
>On Fri, 25 Apr 2003 [email protected] wrote:
>
> > Hi,
> >
> > Further to my earlier message, I have divided the modules as follows:
> >
> >
> > ---Start of MainDam.java (Main program)------
> >
> > public class MainDam extends ComponentGateway {
> >
> >      private static XMLCFactory xmlcFactory = null;
> >
> >
> >  public Document handleDefault (BComponent root, ViewContext vc,
> > HttpServletRequest req, HttpServletResponse resp) {
> >
> >         if (xmlcFactory==null) xmlcFactory = new
> > XMLCStdFactory(this.getClass().getClassLoader(), new StreamXMLCLogger());
> >         XMLObject page =
> > xmlcFactory.create(test.presentation.MainDamHTML.class);
> >
> >         //create the component and bind it to the view and the model
> >         BTemplate templateComp = new BTemplate();
> >         templateComp.setView(new
> > DefaultTemplateView(page.getElementById("MainDam")));
> >
> >       templateComp.addModel(new MainDamModel());
> >       templateComp.addModel(new MenuDam());
> >       templateComp.addModel(new HeadFoot());
> >
> >         root.addChild(templateComp);
> >
> >         return page;
> >     }
> >
> >
> >     class MainDamModel extends AbstractTemplateModel {
> >
> >         //register the model by name
> >         public String getName() {
> >             return "MainDam";
> >         }
> >
> >         //provide items by key
> >         public Object getItem(String key) {
> >             ViewContext vc = getViewContext();
> >             if (key.equals("Title")) return "DTS main Page";
> >
> >            else if (key.equals("MainText")) {
> >               XMLObject
> > mainText=xmlcFactory.create(test.presentation.TextDamHTML.class);
> >               Node mainTextNode = mainText.getElementById("mainText");
> >               return
> > vc.getElementFactory().getDocument().importNode(mainTextNode, true);
> >            }
> >           else return super.getItem(key);
> >       }
> >     }
> > }
> >
> > -----end of MainDam.java ------
> > =====================================================
> > ---start of HeadFoot.java -------
> > public  class HeadFoot extends AbstractTemplateModel {
> >
> >       private static XMLCFactory xmlcF2 = null;
> >
> >
> >         public String getName() {
> >             return "HeadFoot";
> >         }
> >
> >         public Object getItem(String key) {
> >             ViewContext vc = getViewContext();
> >
> >           if (key.equals("Header")){
> >               XMLObject header =
> > xmlcF2.create(test.presentation.HeaderHTML.class);
> >               Node headerNode = header.getElementById("header");
> >               return
> > vc.getElementFactory().getDocument().importNode(headerNode, true);
> >               }
> >
> >             else if (key.equals("Footer")) {
> >                 XMLObject footer =
> > xmlcF2.create(test.presentation.FooterHTML.class);
> >                 Node footerNode = footer.getElementById("footer");
> >                 return
> > vc.getElementFactory().getDocument().importNode(footerNode, true);
> >             }
> >
> >
> >               else if(key.equals("Time")){
> >                       String
> > now=DateFormat.getTimeInstance(DateFormat.SHORT).format(new Date());
> >                       return now;
> >               }
> >
> >            else return super.getItem(key);
> >         }
> > }
> >
> > ----end of HeadFoot.java------
> >
> > =================
> >
> > ------start of MenuDam.java --------------
> >
> > public class MenuDam extends AbstractTemplateModel {
> >
> >       private static XMLCFactory xmlcF1 = null;
> >
> >         public String getName() {
> >             return "MenuDam";
> >         }
> >
> >         public Object getItem(String key) {
> >             ViewContext vc = getViewContext();
> >
> >       if (key.equals("Menu")){
> >               XMLObject menu =
> > xmlcF1.create(test.presentation.MenuDamHTML.class);
> >               Node menuNode = menu.getElementById("menu");
> >               return
> > vc.getElementFactory().getDocument().importNode(menuNode, true);
> >               }
> >               else if(key.equals("DamarMain")){
> >                       BLink blink = new BLink(" ", "/mypage", vc);
> >                 return blink;
> >               }
> >
> >               else if(key.equals("PattyMain")){
> >                       BLink blink=new BLink("","/pattymain", vc);
> >                       return blink;
> >                       }
> >
> >       else return super.getItem(key);
> >         }
> > }
> > ----end of menuDam.java ---
> > ==========================End of all Codes ================
> >
> > With the above codes, I managed to compile and run the application, but
> > when I access the page, I get the following error message:
> >
> > Error: 500
> > Internal Servlet Error:
> >
> > java.lang.NullPointerException
> >       at HeadFoot.getItem(HeadFoot.java:27)
> >       at
> > 
> org.enhydra.barracuda.core.comp.renderer.TemplateHelper.getNode(TemplateHelper.java:293)
> >       at
> > 
> org.enhydra.barracuda.core.comp.renderer.TemplateHelper.copyChildNodes(TemplateHelper.java:121)
> >       at
> > 
> org.enhydra.barracuda.core.comp.renderer.TemplateHelper.getNode(TemplateHelper.java:579)
> >       at
> > 
> org.enhydra.barracuda.core.comp.renderer.TemplateHelper.copyChildNodes(TemplateHelper.java:121)
> >       at
> > 
> org.enhydra.barracuda.core.comp.renderer.TemplateHelper.getNode(TemplateHelper.java:579)
> >       at
> > 
> org.enhydra.barracuda.core.comp.renderer.TemplateHelper.copyChildNodes(TemplateHelper.java:121)
> >       at
> > 
> org.enhydra.barracuda.core.comp.renderer.TemplateHelper.getNode(TemplateHelper.java:579)
> >       at
> > 
> org.enhydra.barracuda.core.comp.renderer.TemplateHelper.copyChildNodes(TemplateHelper.java:121)
> >       at
> > 
> org.enhydra.barracuda.core.comp.renderer.TemplateHelper.getNode(TemplateHelper.java:579)
> >       at
> > 
> org.enhydra.barracuda.core.comp.renderer.TemplateHelper.copyChildNodes(TemplateHelper.java:121)
> >       at
> > 
> org.enhydra.barracuda.core.comp.renderer.TemplateHelper.getNode(TemplateHelper.java:579)
> >       at
> > 
> org.enhydra.barracuda.core.comp.renderer.TemplateHelper.copyChildNodes(TemplateHelper.java:121)
> >       at
> > 
> org.enhydra.barracuda.core.comp.renderer.TemplateHelper.getNode(TemplateHelper.java:579)
> >       at
> > 
> org.enhydra.barracuda.core.comp.renderer.TemplateHelper.copyChildNodes(TemplateHelper.java:121)
> >       at
> > 
> org.enhydra.barracuda.core.comp.renderer.TemplateHelper.render(TemplateHelper.java:102)
> >       at
> > 
> org.enhydra.barracuda.core.comp.renderer.html.HTMLTemplateRenderer.renderComponent(HTMLTemplateRenderer.java:113)
> >       at
> > org.enhydra.barracuda.core.comp.BComponent.renderView(BComponent.java:563)
> >       at
> > org.enhydra.barracuda.core.comp.BComponent.render(BComponent.java:458)
> >       at
> > org.enhydra.barracuda.core.comp.BComponent.render(BComponent.java:476)
> >       at
> > org.enhydra.barracuda.core.comp.BComponent.render(BComponent.java:388)
> >       at
> > 
> org.enhydra.barracuda.core.comp.helper.ComponentGateway.handleDefault(ComponentGateway.java:274)
> >       at
> > 
> org.enhydra.barracuda.core.comp.helper.ComponentGateway.doGet(ComponentGateway.java:174)
> >       at javax.servlet.http.HttpServlet.service(HttpServlet.java:740)
> >       at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
> >       at org.apache.tomcat.core.ServiceInvocationHandler.method(Unknown
> > Source)
> >       at org.apache.tomcat.core.ServletWrapper.handleInvocation(Unknown
> > Source)
> >       at org.apache.tomcat.core.ServletWrapper.handleRequest(Unknown
> > Source)
> >       at org.apache.tomcat.core.Context.handleRequest(Unknown Source)
> >       at
> > org.enhydra.servlet.servletManager.ServletManager.service(Unknown Source)
> >       at
> > org.enhydra.servlet.connectionMethods.http.HttpHandler.doARequest(Unknown
> > Source)
> >       at
> > 
> org.enhydra.servlet.connectionMethods.http.HttpHandler.processRequests(Unknown
> > Source)
> >       at
> > org.enhydra.servlet.connectionMethods.http.HttpHandler.run(Unknown Source)
> >       at java.lang.Thread.run(Thread.java:536)
> >
> > =================
> > HeadFoot.java line 27 is:
> >
> > XMLObject header = xmlcF2.create(test.presentation.HeaderHTML.class);
> >
> > The above line plus the other messages, what I have not done correctly?
> >
> > Any pointers would be highly appreciated.
> >
> > Thanks once again, and apology for the lengthy message.
> >
> > Damar
> >
> > _______________________________________________
> > Barracuda mailing list
> > [email protected]
> > http://barracudamvc.org/lists/listinfo/barracuda
> >
> >
>
>_______________________________________________
>Barracuda mailing list
>[email protected]
>http://barracudamvc.org/lists/listinfo/barracuda
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.