You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@shale.apache.org by Ryan de Laplante <ry...@ijws.com> on 2007/02/11 23:54:04 UTC

Help getting started

Hi,

This weekend I read almost all of the documentation on Shale and wanted 
to get started with a new project that uses view controller and clay. 
When I started trying to create a project created in NetBeans 5.5, I ran 
into some trouble. 

First I created a new web project (not visual web), added the Java 
Server Faces 1.2 framework (Sun RI) to the project, then added Shale 
jars to the library dependencies screen.  Next I edited 
faces-config.xml.   Based on 
shale-framework-1.0.4\shale-view\src\main\resources\META-INF\faces-config.xml, 
I get the impression that I need ALL of it to make the view controller 
work.  Is that true?  There doesn't seem to be much documentation on 
faces-config.xml for shale except for some sample files.   When I copy 
this data into my faces-config.xml and deploy the project, I get a long 
stack dump:


Initializing Sun's JavaServer Faces implementation (1.2_02-b03-FCS) for 
context '/ShaleTest'
Cant instantiate class: phase-listener: 
org.apache.shale.view.faces.ViewPhaseListener.
java.lang.ClassNotFoundException: 
org.apache.shale.view.faces.ViewPhaseListener
        at 
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1511)
        at 
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1292)
...

I noticed that NetBeans put all of the jar files into WEB-INF/classes/. 
I removed the jars from the project Libraries, and manually copied them 
into WEB-INF/lib/.   When I redeploy the project, that error is gone and 
I get a different one:

WEB0100: Loading web module [ShaleTest] in virtual server [server] at 
[/ShaleTest]
Initializing org.apache.shale.view.faces.LifecycleListener
Initializing org.apache.shale.view.faces.LifecycleListener
Initializing Sun's JavaServer Faces implementation (1.2_02-b03-FCS) for 
context '/ShaleTest'
Instantiating DialogPhaseListener()
Instantiating DialogNavigationHandler (wrapping instance 
'com.sun.faces.application.NavigationHandlerImpl@780f54')
Installed the Tiger VariableResolverImpl wrapping original instance 
com.sun.faces.el.ChainAwareVariableResolver@367d11
Loading Clay View Handler
Completed initializing Sun's JavaServer Faces implementation 
(1.2_02-b03-FCS) for context '/ShaleTest'
Initializing Dialog SCXML Implementation
No dialog configuration information present.  No default configuration 
found at: /WEB-INF/dialog-config.xml.  No embedded configuration found 
at: META-INF/dialog-config.xml
Initializing Validator Integration
Begin loading config files.
Loading file 
"file:/D:/dev/ShaleTest/build/web/WEB-INF/lib/shale-clay-1.0.4.jar!/META-INF/clay-config.xml".
Loading digester rules.
Begin resolving inheritance @:-<
Finding parents ?:-[
Checking for circular inheritance %:-{
Realizing heritage $:-<
Inheritance resolved @:-)
Done loading config file(s).
Starting up Shale Tiger extensions
Parse Error at line 8 column 118: Document root element "faces-config", 
must match DOCTYPE root "null".
org.xml.sax.SAXParseException: Document root element "faces-config", 
must match DOCTYPE root "null".
        at 
com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(ErrorHandlerWrapper.java:195)
        at 
com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.error(ErrorHandlerWrapper.java:131)

I noticed that the faces-config.xml that NetBeans 5.5 generated (for JSF 
1.2) starts like this:

<?xml version='1.0' encoding='UTF-8'?>

<!-- =========== FULL CONFIGURATION FILE 
================================== -->
<faces-config version="1.2"
    xmlns="http://java.sun.com/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
http://java.sun.com/xml/ns/javaee/web-facesconfig_1_2.xsd">

and the faces-config.xml that came in the 
shale-framework-1.0.4\shale-view\src\main\resources\META-INF\ directory 
starts like this:

<?xml version="1.0"?>
<!DOCTYPE faces-config PUBLIC
  "-//Sun Microsystems, Inc.//DTD JavaServer Faces Config 1.1//EN"
  "http://java.sun.com/dtd/web-facesconfig_1_1.dtd">
<!-- ====================== SHALE CONFIGURATION FILE 
======================= -->
<faces-config>

So I copied the DOCTYPE part into my faces-config.xml even though it 
looks wrong (for 1.1 not 1.2?).  I put it just before the <faces-config 
...> line.

now the exception is:

WEB0100: Loading web module [ShaleTest] in virtual server [server] at 
[/ShaleTest]
Initializing org.apache.shale.view.faces.LifecycleListener
Initializing org.apache.shale.view.faces.LifecycleListener
Initializing Sun's JavaServer Faces implementation (1.2_02-b03-FCS) for 
context '/ShaleTest'
Completed initializing Sun's JavaServer Faces implementation 
(1.2_02-b03-FCS) for context '/ShaleTest'
WebModule[/ShaleTest]Exception sending context initialized event to 
listener instance of class com.sun.faces.config.ConfigureListener
javax.faces.FacesException: Can't parse configuration file: 
jndi:/server/ShaleTest/WEB-INF/faces-config.xml: Error at line 12 column 
118: Attribute "version" must be declared for element type "faces-config".
        at 
com.sun.faces.config.ConfigureListener.parse(ConfigureListener.java:1587)
        at 
com.sun.faces.config.ConfigureListener.contextInitialized(ConfigureListener.java:491)

Version is already declared. Changing it from 1.2 to 1.1 does not make a 
difference.


 From the documentation I get the impression that I don't need to use 
the application controller unless I want to.  When I look at the sample 
faces-config.xml for shale-view I see application controller stuff in 
there.  Does the view controller depend on the application controller?  
I just want a minimal config where I get my AbstractViewController 
events such as init and prerender. 


I also noticed that there isn't much real documentation on Clay other 
than the good overview and a sample usecase project (which also has no 
documentation). Maybe that is all the documentation I should need but I 
have questions about the xml configs , can I use the same jsfid on 
different pages to refer to different components, etc... We won't get 
into those questions just yet.


And lastly there is a https://nbshalesupport.dev.java.net/ project with 
no information whatsoever.  I'm curious what kind of support it will add 
to NetBeans.  Will make Shale a "Framework" you add to a web project?  
Will it somehow integrate with Visual Web Pack?

I'm excited about JSF + Shale View Controller + Clay.  The testing 
module looks very good too.   I don't quite understand the need for the 
application controller module yet, and will have to read the overview 
again.

I have a program that I'd like to switch from Visual Web Pack to Shale 
so that I have more control over the HTML/CSS and can have mobile web 
users access the app without having to download heavy theme files.


Thanks,
Ryan de Laplante