What is wrong with my very very simple web app: web app successfully deployed to app server but hello bean did not inject to index.xhtml page (page shows just Hello from Facelets: #{hello.value})?
(this is first time when I am working with JSF, so maybe this question is very easy, and also I used good article http://arjan-tijms.omnifaces.org/2011/08/minimal-3-tier-java-ee-app-without-any.html )
I have the next structure of war archive:
mywebapp
|
- WEB_INF
|
- classes
|
- Hello.class
- index.html
Hello.java has:
import javax.enterprise.context.RequestScoped;
import javax.inject.Named;
@Named
@RequestScoped
public class Hello {
private String value;
public String getValue() {
return "Hello JSF";
}
public void setValue(String value) {
this.value = value;
}
}
and also my index.xhtml
<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://xmlns.jcp.org/jsf/html">
<h:head>
<title>My Facelet Page Title</title>
</h:head>
<h:body>
Hello from Facelets: #{hello.value}
</h:body>
</html>
For building project I used pom.xml:
....
<packaging>war</packaging>
<name>Simple web app</name>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>2.4</version>
<configuration>
<failOnMissingWebXml>false</failOnMissingWebXml>
</configuration>
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<groupId>javax</groupId>
<artifactId>javaee-api</artifactId>
<version>7.0</version>
<scope>provided</scope>
</dependency>
</dependencies>
Taken from JavaServerFaces 2.0, The Complete Reference:
An entry in the Web application’s web.xml file enables the Faces Controller servlet when a certain URL pattern is specified, such as /faces/. When running JSF 2.0 on a Servlet 3.0 container, such as Sun’s Glassfish v3, the web.xml is optional. If no web.xml is found, the Faces Controller servlet is automatically mapped to the most popular URL patterns: /faces/, .jsf, and .faces.
So you should try with something like this:
localhost:8080/mywebapp/faces/index.xhtml.
According to the javadoc, FacesServlet will be automatically registered if any of the following conditions are true:
faces-config.xml file is found in WEB-INF
faces-config.xml file is found in the META-INF directory of a jar in the application's classpath..faces-config.xml is found in the META-INF directory of a jar in the application's classpath.javax.faces.CONFIG_FILES context param is declared in web.xml or web-fragment.xml.Set of classes passed to the onStartup() method of the ServletContainerInitializer implementation is not empty.If you are using web.xml only for registering FacesServlet, then it would be optional if any of the above conditions are met.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With