- Keep in mind that any changes you make to faces-config.xml will take effect only if you restart(redeploy) your application.
- Check out the HTML generated. If you see that tags are not closed, or some tags are completely missing, try to remove some of the JSF code to see exactly which part causes the problem.
- Increase the JSF loglevel. This depends on the particular JSF implementation. If you are using the Sun RI, the following packages need to get their loglevel increased to level "FINE":
com.sun.faces.application com.sun.faces.el com.sun.faces.lifecycle
How you are doing this depends on the environment you are workin in. If you are using the Glassfish application server, go the the admin console, then "Application server", "Logging", "Loglevels". However, you can also set the loglevel of these packages programmatically, using Logger.getLogger(..).setLevel(..). If you are successful with either of these methods, you should see log messages like this:
parse(jndi:/server/TrainingLog-war/WEB-INF/faces-config.xml)
added converter of type 'javax.faces.Long' and class 'javax.faces.convert.LongConverter'
added converter of class type 'javax.faces.convert.LongConverter'
added converter of type 'javax.faces.Short' and class 'javax.faces.convert.ShortConverter'
added converter of class type 'javax.faces.convert.ShortConverter'
Unknown entity, deferring to superclass.
Unknown entity, deferring to superclass.
added converter of class type 'javax.faces.convert.BigDecimalConverter'
addManagedBean(SessionBean1)
addManagedBean(Login)
addManagedBean(ApplicationBean1)
addManagedBean(RequestBean1)
addManagedBean(ViewMyUsers)
addManagedBean(ViewMyTrainings)
addManagedBean(ViewMyParts)
addNavigationRule(/ViewMyUsers.jsp)
addNavigationRule(/Login.jsp)
addManagedBean(init)
addNavigationRule(/init.jsp)
Created Default Lifecycle
Defined editorClass class com.sun.faces.application.ConverterPropertyEditorFor_java_math_BigInteger
added converter of class type 'javax.faces.convert.BigIntegerConverter'
added converter of type 'javax.faces.BigDecimal' and class 'javax.faces.convert.BigDecimalConverter'
added converter of type 'javax.faces.BigInteger' and class 'javax.faces.convert.BigIntegerConverter'
getLifecycle: DEFAULT com.sun.faces.lifecycle.LifecycleImpl@b69761
addedLifecycle: com.sun.faces.lifecycle.PARTIAL com.sun.faces.extensions.avatar.lifecycle.PartialTraversalLifecycle@4e3bb0
getLifecycle: com.sun.faces.lifecycle.PARTIAL com.sun.faces.extensions.avatar.lifecycle.PartialTraversalLifecycle@4e3bb0
addPhaseListener(ANY 0,com.sun.faces.lifecycle.ELResolverInitPhaseListener@15a4e36
getLifecycle: DEFAULT com.sun.faces.lifecycle.LifecycleImpl@b69761
addPhaseListener(ANY 0,com.sun.faces.lifecycle.ELResolverInitPhaseListener@177dde7
added converter of type 'javax.faces.Boolean' and class 'javax.faces.convert.BooleanConverter'
Created ApplicationFactory
JSF1032: Resource injection ENABLED using InjectionProvider 'com.sun.faces.vendor.GlassFishInjectionProvider'.
Created Application instance
added converter of type 'javax.faces.Byte' and class 'javax.faces.convert.ByteConverter'
Created Application instance 'com.sun.faces.application.ApplicationImpl@191b687'
"JSF1016: Target class 'com.sun.faces.application.ActionListenerImpl' doesnt have an adapter constructor to accept '{1}', creating a new instance instead.
set ActionListener Instance to 'com.sun.faces.application.ActionListenerImpl'
set ActionListener Instance to 'com.sun.rave.web.ui.appbase.faces.ActionListenerImpl'
"JSF1016: Target class 'com.sun.faces.application.NavigationHandlerImpl' doesnt have an adapter constructor to accept '{1}', creating a new instance instead.
Created NavigationHandler instance
set NavigationHandler Instance to 'com.sun.faces.application.NavigationHandlerImpl'
added converter of type 'javax.faces.Character' and class 'javax.faces.convert.CharacterConverter'
added converter of type 'javax.faces.DateTime' and class 'javax.faces.convert.DateTimeConverter'
added converter of type 'javax.faces.Double' and class 'javax.faces.convert.DoubleConverter'
added converter of type 'javax.faces.Float' and class 'javax.faces.convert.FloatConverter'
added converter of type 'javax.faces.Integer' and class 'javax.faces.convert.IntegerConverter'
"JSF1016: Target class 'com.sun.webui.jsf.faces.DataProviderELResolver' doesnt have an adapter constructor to accept '{1}', creating a new instance instead.
added converter of type 'javax.faces.Long' and class 'javax.faces.convert.LongConverter'
added converter of type 'javax.faces.Number' and class 'javax.faces.convert.NumberConverter'
"JSF1016: Target class 'com.sun.webui.jsf.faces.ThemeELResolver' doesnt have an adapter constructor to accept '{1}', creating a new instance instead.
"JSF1016: Target class 'com.sun.faces.application.StateManagerImpl' doesnt have an adapter constructor to accept '{1}', creating a new instance instead.
set StateManager Instance to 'com.sun.faces.application.StateManagerImpl'
added converter of type 'javax.faces.Short' and class 'javax.faces.convert.ShortConverter'
Added managedBeanFactory com.sun.faces.config.ManagedBeanFactoryImpl@e76ee6 for CurrentUser
Added managedBeanFactory com.sun.faces.config.ManagedBeanFactoryImpl@137f1 for LoginPageBean
Added managedBeanFactory com.sun.faces.config.ManagedBeanFactoryImpl@bb1db8 for MenuBean
set StateManager Instance to 'com.sun.faces.extensions.avatar.application.DeferredStateManager'
"JSF1016: Target class 'com.sun.faces.application.ViewHandlerImpl' doesnt have an adapter constructor to accept '{1}', creating a new instance instead.
Created ViewHandler instance
Added managedBeanFactory com.sun.faces.config.ManagedBeanFactoryImpl@11c61fe for RegisterPageBean
set ViewHandler Instance to 'com.sun.faces.application.ViewHandlerImpl'
Added managedBeanFactory com.sun.faces.config.ManagedBeanFactoryImpl@baad4f for TransferListPageBean
Added managedBeanFactory com.sun.faces.config.ManagedBeanFactoryImpl@b9f79a for TransferPageBean
Added managedBeanFactory com.sun.faces.config.ManagedBeanFactoryImpl@149d4d for UserManagementPageBean
set ViewHandler Instance to 'com.sun.rave.web.ui.appbase.faces.ViewHandlerImpl'
added component of type 'com.sun.faces.AjaxZone' and class 'com.sun.faces.extensions.avatar.components.AjaxZone'
added component of type 'com.sun.faces.extensions.avatar.Scripts' and class 'com.sun.faces.extensions.avatar.components.ScriptsComponent'
added component of type 'com.sun.rave.faces.Encoding' and class 'com.sun.rave.faces.component.EncodingComponent'
<some stuff snipped>
added component of type 'javax.faces.ViewRoot' and class 'com.sun.faces.extensions.avatar.components.PartialTraversalViewRootImpl'
added converter of type 'javax.faces.Boolean' and class 'javax.faces.convert.BooleanConverter'
<some stuff snipped>
Added managedBeanFactory com.sun.faces.config.ManagedBeanFactoryImpl@13fe739 for ApplicationBean1
Added managedBeanFactory com.sun.faces.config.ManagedBeanFactoryImpl@13e8c11 for Login
Added managedBeanFactory com.sun.faces.config.ManagedBeanFactoryImpl@9e637e for RequestBean1
Added managedBeanFactory com.sun.faces.config.ManagedBeanFactoryImpl@1986321 for SessionBean1
Added managedBeanFactory com.sun.faces.config.ManagedBeanFactoryImpl@10f546e for ViewMyParts
Added managedBeanFactory com.sun.faces.config.ManagedBeanFactoryImpl@622bff for ViewMyTrainings
Added managedBeanFactory com.sun.faces.config.ManagedBeanFactoryImpl@b3ca83 for ViewMyUsers
Added managedBeanFactory com.sun.faces.config.ManagedBeanFactoryImpl@15c46da for init
Using client state buffer size of 4096
added validator of type 'javax.faces.DoubleRange' class 'javax.faces.validator.DoubleRangeValidator'
added validator of type 'javax.faces.Length' class 'javax.faces.validator.LengthValidator'
added validator of type 'javax.faces.LongRange' class 'javax.faces.validator.LongRangeValidator'
Completed initializing Sun's JavaServer Faces implementation (1.2_04-b20-p03) for context '/TrainingLog-war'
getLifecycle: com.sun.faces.lifecycle.PARTIAL com.sun.faces.extensions.avatar.lifecycle.PartialTraversalLifecycle@4e3bb0
SMGT0007: Self Management Rules service is enabled
Application server startup complete.
contextDestroyed()
CORE5022: All ejb(s) of [Micropayment-JSF] were unloaded successfully!
TopLink, version: Oracle TopLink Essentials - 2.0 (Build b58g-fcs (09/07/2007))
Server: unknown
file:/home/surfk/sun/Micropayment-JSF/dist/gfdeploy/Micropayment-JSF-ejb_jar/-Micropayment-JSF-ejbPU login successful
file:/home/surfk/sun/Micropayment-JSF/dist/gfdeploy/Micropayment-JSF-ejb_jar/-Micropayment-JSF-ejbPU logout successful
JDO76609: Got SQLException executing statement "CREATE TABLE USERS (ID BIGINT NOT NULL, PASSWORD VARCHAR(50), BALANCE FLOAT, REALNAME VARCHAR(255), USERROLE INTEGER, LOGIN VARCHAR(50), PRIMARY KEY (ID))": java.sql.SQLException: Table/View 'USERS' already exists in Schema 'APP'.
JDO76609: Got SQLException executing statement "CREATE TABLE TRANSFER (ID BIGINT NOT NULL, TRANSFERTIME TIMESTAMP, AMOUNT FLOAT, SENDER_ID BIGINT, RECIPIENT_ID BIGINT, PRIMARY KEY (ID))": java.sql.SQLException: Table/View 'TRANSFER' already exists in Schema 'APP'.
JDO76609: Got SQLException executing statement "ALTER TABLE TRANSFER ADD CONSTRAINT TRANSFERRCIPIENTID FOREIGN KEY (RECIPIENT_ID) REFERENCES USERS (ID)": java.sql.SQLException: Constraint 'TRANSFERRCIPIENTID' already exists in Schema 'APP'.
JDO76609: Got SQLException executing statement "ALTER TABLE TRANSFER ADD CONSTRAINT TRANSFER_SENDER_ID FOREIGN KEY (SENDER_ID) REFERENCES USERS (ID)": java.sql.SQLException: Constraint 'TRANSFER_SENDER_ID' already exists in Schema 'APP'.
JDO76609: Got SQLException executing statement "CREATE TABLE SEQUENCE (SEQ_NAME VARCHAR(50) NOT NULL, SEQ_COUNT DECIMAL, PRIMARY KEY (SEQ_NAME))": java.sql.SQLException: Table/View 'SEQUENCE' already exists in Schema 'APP'.
JDO76609: Got SQLException executing statement "INSERT INTO SEQUENCE(SEQ_NAME, SEQ_COUNT) values ('SEQ_GEN', 1)": java.sql.SQLIntegrityConstraintViolationException: The statement was aborted because it would have caused a duplicate key value in a unique or primary key constraint or unique index identified by 'SQL080109084126840' defined on 'SEQUENCE'.
deployed with moduleid = Micropayment-JSF
naming.bind
POARemoteRefFactory checking if SFSBVersionPolicy need to be added
EJBSCLookup:: sc.getEjbContainerAvailabilityEnabledFromConfig() ==> false
POARemoteRefFactory addSFSBVersionPolicy? false
POARemoteRefFactory checking if SFSBVersionPolicy need to be added
EJBSCLookup:: sc.getEjbContainerAvailabilityEnabledFromConfig() ==> false
POARemoteRefFactory addSFSBVersionPolicy? false
**RemoteBusinessJndiName: micropayment.ejb.manager.UserManagerRemote; remoteBusIntf: micropayment.ejb.manager.UserManagerRemote
naming.bind
POARemoteRefFactory checking if SFSBVersionPolicy need to be added
EJBSCLookup:: sc.getEjbContainerAvailabilityEnabledFromConfig() ==> false
POARemoteRefFactory addSFSBVersionPolicy? false
POARemoteRefFactory checking if SFSBVersionPolicy need to be added
EJBSCLookup:: sc.getEjbContainerAvailabilityEnabledFromConfig() ==> false
POARemoteRefFactory addSFSBVersionPolicy? false
**RemoteBusinessJndiName: micropayment.ejb.manager.TransferManagerRemote; remoteBusIntf: micropayment.ejb.manager.TransferManagerRemote
LDR5010: All ejb(s) of [Micropayment-JSF] loaded successfully!
JSF1021: [/Micropayment-JSF-war] Configuration option 'com.sun.faces.displayConfiguration' - DISABLED
<some stuff snipped>
'com.sun.faces.vendor.GlassFishInjectionProvider'
JSF1018: [/Micropayment-JSF-war] Configuration option 'com.sun.faces.responseBufferSize' set to '1024'
JSF1018: [/Micropayment-JSF-war] Configuration option 'com.sun.faces.clientStateWriteBufferSize' set to '8192'
Initializing Sun's JavaServer Faces implementation (1.2_04-b20-p03) for context '/Micropayment-JSF-war'
contextInitialized()
Attempting to configure Digester to perform document validation.
addRenderer(javax.faces.Command,javax.faces.Button)
<some stuff snipped>
parse(jndi:/server/Micropayment-JSF-war/WEB-INF/faces-config.xml)
Unknown entity, deferring to superclass.
Unknown entity, deferring to superclass.
addManagedBean(LoginPageBean)
addManagedBean(MenuBean)
addManagedBean(CurrentUser)
addManagedBean(RegisterPageBean)
addManagedBean(UserManagementPageBean)
addManagedBean(TransferPageBean)
addManagedBean(TransferListPageBean)
addNavigationRule(*)
addNavigationRule(/secure/owner/usermanagement.jsp)
addNavigationRule(/secure/regular/newtransfer.jsp)
Created Default Lifecycle
getLifecycle: DEFAULT com.sun.faces.lifecycle.LifecycleImpl@19081e1
addPhaseListener(ANY 0,com.sun.faces.lifecycle.ELResolverInitPhaseListener@184d505
Created ApplicationFactory
JSF1032: Resource injection ENABLED using InjectionProvider 'com.sun.faces.vendor.GlassFishInjectionProvider'.
Created Application instance
Created Application instance 'com.sun.faces.application.ApplicationImpl@a1ea7d'
"JSF1016: Target class 'com.sun.faces.application.ActionListenerImpl' doesnt have an adapter constructor to accept '{1}', creating a new instance instead.
set ActionListener Instance to 'com.sun.faces.application.ActionListenerImpl'
"JSF1016: Target class 'com.sun.faces.application.NavigationHandlerImpl' doesnt have an adapter constructor to accept '{1}', creating a new instance instead.
Created NavigationHandler instance
set NavigationHandler Instance to 'com.sun.faces.application.NavigationHandlerImpl'
"JSF1016: Target class 'com.sun.faces.application.StateManagerImpl' doesnt have an adapter constructor to accept '{1}', creating a new instance instead.
set StateManager Instance to 'com.sun.faces.application.StateManagerImpl'
"JSF1016: Target class 'com.sun.faces.application.ViewHandlerImpl' doesnt have an adapter constructor to accept '{1}', creating a new instance instead.
Created ViewHandler instance
set ViewHandler Instance to 'com.sun.faces.application.ViewHandlerImpl'
added component of type 'javax.faces.Column' and class 'javax.faces.component.UIColumn'
<some stuff snipped>
Added managedBeanFactory com.sun.faces.config.ManagedBeanFactoryImpl@17e1e5c for CurrentUser
Added managedBeanFactory com.sun.faces.config.ManagedBeanFactoryImpl@3e6a94 for LoginPageBean
Added managedBeanFactory com.sun.faces.config.ManagedBeanFactoryImpl@2146b2 for MenuBean
Added managedBeanFactory com.sun.faces.config.ManagedBeanFactoryImpl@1bde842 for RegisterPageBean
Added managedBeanFactory com.sun.faces.config.ManagedBeanFactoryImpl@19c30aa for TransferListPageBean
Added managedBeanFactory com.sun.faces.config.ManagedBeanFactoryImpl@1988946 for TransferPageBean
Added managedBeanFactory com.sun.faces.config.ManagedBeanFactoryImpl@1794a2d for UserManagementPageBean
Using client state buffer size of 4096
added validator of type 'javax.faces.DoubleRange' class 'javax.faces.validator.DoubleRangeValidator'
added validator of type 'javax.faces.Length' class 'javax.faces.validator.LengthValidator'
added validator of type 'javax.faces.LongRange' class 'javax.faces.validator.LongRangeValidator'
Completed initializing Sun's JavaServer Faces implementation (1.2_04-b20-p03) for context '/Micropayment-JSF-war'
getLifecycle: DEFAULT com.sun.faces.lifecycle.LifecycleImpl@19081e1
execute(com.sun.faces.context.FacesContextImpl@13cbbb1)
phase(RESTORE_VIEW 1,com.sun.faces.context.FacesContextImpl@13cbbb1)
JSF1028: [/Micropayment-JSF-war] The ELResolvers for JSF successfully registered with the JSP container.
Entering RestoreViewPhase
New request: creating a view for /login.jsp
Created component with component type of 'javax.faces.ViewRoot'
servletPath /faces
pathInfo /login.jsp
URL pattern of the FacesServlet executing the current request /faces
Created new view for /login.jsp
Locale for this view as determined by calculateLocale en_US
RenderKitId for this view as determined by calculateRenderKitId HTML_BASIC
Exiting RestoreViewPhase
TIMING: Exectution time for phase 'RESTORE_VIEW 1': 72
getLifecycle: DEFAULT com.sun.faces.lifecycle.LifecycleImpl@19081e1
removePhaseListener(ANY 0,com.sun.faces.lifecycle.ELResolverInitPhaseListener@184d505
Skipping rest of execute() because of a reload
render(com.sun.faces.context.FacesContextImpl@13cbbb1)
phase(RENDER_RESPONSE 6,com.sun.faces.context.FacesContextImpl@13cbbb1)
Entering RenderResponsePhase
About to render view /login.jsp
About to execute view /login.jsp
Before dispacthMessage to viewId /login.jsp
Created component with component type of 'javax.faces.HtmlOutputText'
Created component with component type of 'javax.faces.NamingContainer'
Created component with component type of 'javax.faces.HtmlForm'
Created bean MenuBean successfully
Created component with component type of 'javax.faces.HtmlDataTable'
Created component with component type of 'javax.faces.Column'
Created component with component type of 'javax.faces.HtmlCommandLink'
Created component with component type of 'javax.faces.HtmlOutputText'
Created component with component type of 'javax.faces.HtmlOutputText'
Created component with component type of 'javax.faces.HtmlForm'
Created component with component type of 'javax.faces.HtmlOutputText'
Created component with component type of 'javax.faces.HtmlInputText'
Created component with component type of 'javax.faces.HtmlOutputText'
Created component with component type of 'javax.faces.HtmlInputSecret'
Created component with component type of 'javax.faces.HtmlOutputText'
Created component with component type of 'javax.faces.HtmlMessages'
Created component with component type of 'javax.faces.HtmlOutputText'
Created component with component type of 'javax.faces.HtmlCommandButton'
Created component with component type of 'javax.faces.HtmlOutputText'
Created component with component type of 'javax.faces.HtmlOutputText'
After dispacthMessage to viewId /login.jsp
Completed building view for :
/login.jsp
About to render view /login.jsp
component.getValue() returned
<table>
<tr>
<td id="menucolumn">
Value to be rendered
<table>
<tr>
<td id="menucolumn">
<some HTML output snipped>
Begin creating serialized view for /login.jsp
End creating serialized view /login.jsp
Client State: total number of characters written: 2108
Exiting RenderResponsePhase
TIMING: Exectution time for phase 'RENDER_RESPONSE 6': 1489
execute(com.sun.faces.context.FacesContextImpl@1914c67)
phase(RESTORE_VIEW 1,com.sun.faces.context.FacesContextImpl@1914c67)
Entering RestoreViewPhase
servletPath /faces
pathInfo /login.jsp
URL pattern of the FacesServlet executing the current request /faces
Created bean MenuBean successfully
Postback: Restored view for /login.jsp
Exiting RestoreViewPhase
TIMING: Exectution time for phase 'RESTORE_VIEW 1': 27
phase(APPLY_REQUEST_VALUES 2,com.sun.faces.context.FacesContextImpl@1914c67)
Entering ApplyRequestValuesPhase
Set submitted value erger on component
new value after decodingerger
Set submitted value erg on component
new value after decodingerg
No decoding necessary since the component j_id_id49 is not an instance or a sub class of UIInput
This command resulted in form submission ActionEvent queued javax.faces.event.ActionEvent[ source=javax.faces.component.html.HtmlCommandButton@1d6fc09]
Exiting ApplyRequestValuesPhase
TIMING: Exectution time for phase 'APPLY_REQUEST_VALUES 2': 12
phase(PROCESS_VALIDATIONS 3,com.sun.faces.context.FacesContextImpl@1914c67)
Entering ProcessValidationsPhase
Created bean LoginPageBean successfully
No conversion necessary for ergerand converterType class java.lang.String while decoding component j_id_id35
No conversion necessary for ergand converterType class java.lang.String while decoding component j_id_id43
Exiting ProcessValidationsPhase
TIMING: Exectution time for phase 'PROCESS_VALIDATIONS 3': 18
phase(UPDATE_MODEL_VALUES 4,com.sun.faces.context.FacesContextImpl@1914c67)
Entering UpdateModelValuesPhase
TIMING: Exectution time for phase 'UPDATE_MODEL_VALUES 4': 2
phase(INVOKE_APPLICATION 5,com.sun.faces.context.FacesContextImpl@1914c67)
Entering InvokeApplicationsPhase
processAction(j_id_id54)
TopLink, version: Oracle TopLink Essentials - 2.0 (Build b58g-fcs (09/07/2007))
Server: unknown
file:/home/surfk/sun/Micropayment-JSF/dist/gfdeploy/Micropayment-JSF-ejb_jar/-Micropayment-JSF-ejbPU login successful
Adding Message[sourceId=<<NONE>>,summary=Bad username or password)
"JSF1013: Unable to find matching navigation case from view ID '/login.jsp' for outcome '' and action '#{LoginPageBean.loginAction}'
Exiting InvokeApplicationsPhase
TIMING: Exectution time for phase 'INVOKE_APPLICATION 5': 9512
render(com.sun.faces.context.FacesContextImpl@1914c67)
phase(RENDER_RESPONSE 6,com.sun.faces.context.FacesContextImpl@1914c67)
Entering RenderResponsePhase
About to render view /login.jsp
About to execute view /login.jsp
Before dispacthMessage to viewId /login.jsp
Created component with component type of 'javax.faces.HtmlOutputText'
Created component with component type of 'javax.faces.HtmlOutputText'
Created component with component type of 'javax.faces.HtmlOutputText'
Created component with component type of 'javax.faces.HtmlOutputText'
Created component with component type of 'javax.faces.HtmlOutputText'
Created component with component type of 'javax.faces.HtmlOutputText'
Created component with component type of 'javax.faces.HtmlOutputText'
Created component with component type of 'javax.faces.HtmlOutputText'
After dispacthMessage to viewId /login.jsp
Completed building view for :
/login.jsp
About to render view /login.jsp
component.getValue() returned
<table>
<tr>
<td id="menucolumn">
Value to be rendered
<table>
<tr>
<td id="menucolumn">
<some HTML output snipped>
Begin creating serialized view for /login.jsp
End creating serialized view /login.jsp
Client State: total number of characters written: 2112
Exiting RenderResponsePhase
TIMING: Exectution time for phase 'RENDER_RESPONSE 6': 101 - If you think that the problem you are having is somehow connected to the JSF lifecycle (eg. you are developing custom components, etc.), you can also write a custom debugger class based the on the PhaseListener interface. This is nicely detailed here.
- Study the JSF framework in detail. If you happen to be Hungarian, you can read the book I've co-authored: Software development on the Java EE platform.
I'm Java software architect working with Java/Spring/Clojure. Here You'll find some useful snippets that I've come across. Feel free to comment or contact me in email ISTVAN [AT] ISTVANDEVAI [DOT] COM
2008. április 4., péntek
Troubleshooting JSF pages
Anyone who has tried JavaServer Faces development using the Sun Reference Implementation knows that trouble shooting can be a real pain. Many times rendering simply stops at a given point in the page, without any exception or error message. Here are some tips to get you started in troubleshooting your application.
Feliratkozás:
Bejegyzések (Atom)