JSF 2 - Problema com ManagedBean

Olá pessoal,

Alguém sabe como resolver o seguinte problema?
Estou desenvolvendo um projeto simples construído no Maven e importado ao Eclipse. Uso basicamente JSF 2 e RichFaces rodando no Jetty 6.

O projeto é executado e roda, o problema é quando tento acessar algum ManagedBean. Onde o seguinte erro é exibido no terminal:

GRAVE: javax.el.PropertyNotFoundException: /pages/commun/menu.xhtml @33,76 action="#{skinBean.configurarSkin}": Target Unreachable, identifier 'skinBean' resolved to null
javax.faces.el.EvaluationException: javax.el.PropertyNotFoundException: /pages/commun/menu.xhtml @33,76 action="#{skinBean.configurarSkin}": Target Unreachable, identifier 'skinBean' resolved to null
	at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:95)
	at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:102)
	at javax.faces.component.UICommand.broadcast(UICommand.java:315)
	at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:787)
	at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1252)
	at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:81)
	at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
	at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
	at javax.faces.webapp.FacesServlet.service(FacesServlet.java:312)
	at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:511)
	at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:401)
	at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
	at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182)
	at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:766)
	at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:450)
	at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
	at org.mortbay.jetty.Server.handle(Server.java:326)
	at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:542)
	at org.mortbay.jetty.HttpConnection$RequestHandler.content(HttpConnection.java:945)
	at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:756)
	at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:212)
	at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404)
	at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:410)
	at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:582)
Caused by: javax.el.PropertyNotFoundException: /pages/commun/menu.xhtml @33,76 action="#{skinBean.configurarSkin}": Target Unreachable, identifier 'skinBean' resolved to null
	at com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:107)
	at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:88)
	... 23 more

O que parece é que o ManagedBean não é inicializado quando a classe é anotada com @ManagedBean. Se eu mapeio o mesmo usando o faces-config.xml, o método é executado.

Segue os arquivos de configuração:

pom.xml:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<groupId>br.com.plainproject</groupId>
	<artifactId>plainproject</artifactId>
	<packaging>war</packaging>
	<version>1.0-SNAPSHOT</version>
	<name>Plain Project Maven Webapp</name>
	<url>http://maven.apache.org</url>

	<repositories>
		<repository>
			<id>maven2-repository.dev.java.net</id>
			<name>Java.net Repository for Maven</name>
			<url>http://download.java.net/maven/2</url>
		</repository>
		<repository>
			<id>jboss-public-repository-group</id>
			<name>JBoss Public Maven Repository Group</name>
			<url>https://repository.jboss.org/nexus/content/groups/public-jboss/</url>
		</repository>
	</repositories>

	<properties>
		<!-- Explicitly declaring the source encoding eliminates the following 
			message: [WARNING] Using platform encoding (UTF-8 actually) to copy filtered 
			resources, i.e. build is platform dependent! -->
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
		<java.version>1.6</java.version>
		<richfaces.version>4.0.0.Final</richfaces.version>
	</properties>

	<dependencyManagement>
		<dependencies>
			<dependency>
				<groupId>org.richfaces</groupId>
				<artifactId>richfaces-bom</artifactId>
				<version>${richfaces.version}</version>
				<scope>import</scope>
				<type>pom</type>
			</dependency>
		</dependencies>
	</dependencyManagement>

	<dependencies>
		<!-- JSF 2 -->
		<dependency>
			<groupId>com.sun.faces</groupId>
			<artifactId>jsf-api</artifactId>
			<scope>compile</scope>
		</dependency>

		<dependency>
			<groupId>com.sun.faces</groupId>
			<artifactId>jsf-impl</artifactId>
			<scope>compile</scope>
		</dependency>

		<dependency>
			<groupId>javax.servlet</groupId>
			<artifactId>jstl</artifactId>
		</dependency>

		<dependency>
			<groupId>javax.servlet</groupId>
			<artifactId>servlet-api</artifactId>
		</dependency>

		<dependency>
			<groupId>taglibs</groupId>
			<artifactId>standard</artifactId>
			<scope>runtime</scope>
			<version>1.1.1</version>
		</dependency>

		<dependency>
			<groupId>taglibs</groupId>
			<artifactId>c</artifactId>
			<version>1.1.1</version>
			<scope>runtime</scope>
			<type>tld</type>
		</dependency>

		<dependency>
			<groupId>com.sun.el</groupId>
			<artifactId>el-ri</artifactId>
			<version>1.0</version>
		</dependency>

		<dependency>
			<groupId>javax.el</groupId>
			<artifactId>el-api</artifactId>
		</dependency>

		<dependency>
			<groupId>org.glassfish.web</groupId>
			<artifactId>el-impl</artifactId>
			<version>2.2.1-b05</version>
		</dependency>

		<!-- RichFaces -->
		<dependency>
			<groupId>org.richfaces.ui</groupId>
			<artifactId>richfaces-components-ui</artifactId>
		</dependency>
		<dependency>
			<groupId>org.richfaces.core</groupId>
			<artifactId>richfaces-core-impl</artifactId>
		</dependency>
		<dependency>
			<groupId>org.richfaces.cdk</groupId>
			<artifactId>annotations</artifactId>
			<version>${richfaces.version}</version>
			<scope>provided</scope>
		</dependency>

		<!-- Hibernate -->
		<dependency>
			<groupId>org.hibernate</groupId>
			<artifactId>hibernate-validator</artifactId>
			<version>4.2.0.Final</version>
		</dependency>

		<!-- MySQL -->
		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
			<version>5.1.18</version>
		</dependency>

		<!-- Teste -->
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>3.8.1</version>
			<scope>test</scope>
		</dependency>

		<!-- Log -->
		<dependency>
			<groupId>log4j</groupId>
			<artifactId>log4j</artifactId>
			<version>1.2.16</version>
		</dependency>

	</dependencies>

	<build>
		<finalName>plainproject</finalName>
		<plugins>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-compiler-plugin</artifactId>
				<version>2.3.1</version>
				<configuration>
					<source>1.6</source>
					<target>1.6</target>
				</configuration>
			</plugin>
			
			<!-- Eclipse plugin - download source and JavaDoc jars automatically -->
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-eclipse-plugin</artifactId>
				<configuration>
					<wtpversion>2.0</wtpversion>
					<downloadSources>true</downloadSources>
					<downloadJavadocs>true</downloadJavadocs>
				</configuration>
			</plugin>

			<!-- Embedded Jetty (jetty:run) -->
			<plugin>
				<groupId>org.mortbay.jetty</groupId>
				<artifactId>maven-jetty-plugin</artifactId>
				<configuration>
					<!-- Delete this block to have Jetty run default port (8080) -->
					<connectors>
						<connector implementation="org.mortbay.jetty.nio.SelectChannelConnector">
							<port>8080</port>
						</connector>
					</connectors>
					<!-- force friendly name instead of artifact name + version -->
					<contextPath>${project.build.finalName}</contextPath>
					<!-- Where the BeanManager is constructed. This is where you'll declare 
						datasources. -->
					<jettyEnvXml>${basedir}/src/test/resources/jetty-env.xml</jettyEnvXml>
					<!-- This parameter will auto-deploy modified classes. -->
					<!-- You can save changes in a file or class and refresh your browser 
						to view the changes. -->
					<scanIntervalSeconds>3</scanIntervalSeconds>
				</configuration>
			</plugin>
		</plugins>
	</build>
</project>

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" 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-app_2_5.xsd">

	<display-name>Plain Project Web Application</display-name>

	<!-- JSF -->
	<context-param>
		<param-name>javax.faces.PROJECT_STAGE</param-name>
		<param-value>Development</param-value>
	</context-param>
	<servlet>
		<servlet-name>Faces Servlet</servlet-name>
		<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
		<load-on-startup>1</load-on-startup>
	</servlet>
	<servlet-mapping>
		<servlet-name>Faces Servlet</servlet-name>
		<url-pattern>*.jsf</url-pattern>
		<url-pattern>*.xhtml</url-pattern>
	</servlet-mapping>

	<!-- Welcome page -->
	<welcome-file-list>
		<welcome-file>index.html</welcome-file>
	</welcome-file-list>
</web-app>

Obrigado pela ajuda.
[]'s

cade o seu managedbean?

como você utilizou o namespace?

@ManagedBean(name = “managedBean”)

declarou um nome para o mesmo?

att

Como disse o ssh, seu erro é: Target Unreachable, identifier ‘skinBean’ resolved to null

Seu problema está no MB.

O MB é este:


package br.com.plinproject.bean;

import java.io.Serializable;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.SessionScoped;

@ManagedBean
// @ManagedBean(name = "skinBean")  //Tambem já utilizei desta forma
@SessionScoped
public class SkinBean implements Serializable {

	private static final long serialVersionUID = 1L;

	private static final String OUT_COME_SKIN = "skin";

	@ManagedProperty(value = "blueSky")
	private String skin;

	public String getSkin() {
		return skin;
	}

	public void setSkin(String skin) {
		this.skin = skin;
	}

	public String configurarSkin() {
		return OUT_COME_SKIN;
	}
}

cara, não tenho certeza absoluta, mas sua welcome page é um html, acho que você tem que usar xhtml.

<welcome-file-list>  
        <welcome-file>index.xhtml</welcome-file>  
</welcome-file-list> 

Se for o 2.0 sim.

Outra coisa, no seu web.xml você tem mapeados os caminhos para “ativar” o jsf?

Fala galera…

meu index.html é uma página que redireciona para um main.xhtml

Como realizo este mapeamento? O meu DD esta exatamente como mostrado a cima.

[]'s

Só tinha visto o POM. Já está mapeado lá.

<servlet-mapping> <servlet-name>Faces Servlet</servlet-name> <url-pattern>*.jsf</url-pattern> <url-pattern>*.xhtml</url-pattern> </servlet-mapping>

Tem nenhum erro aparecendo nos logs não?

[quote=jakefrog]Só tinha visto o POM. Já está mapeado lá.

<servlet-mapping> <servlet-name>Faces Servlet</servlet-name> <url-pattern>*.jsf</url-pattern> <url-pattern>*.xhtml</url-pattern> </servlet-mapping>

Tem nenhum erro aparecendo nos logs não?[/quote]

é gerado um log, igual ao postado anteriormente =]

[]'s