Re: How to separate Models from the main Program?

<[email protected]>
Newsgroups gmane.comp.java.enhydra.barracuda.general
Message-ID <[email protected]>
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
> 
>
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.