Reputation: 266
I try to made simple JSF example and have several filers. I use Maven, and have stored in META-INF flolder faces-confid.xml..
In output when try to execute i see :
Welcome to JSF. #{test.test}
But I think it must be somthing else.
Here they are:
Bean file
import java.io.Serializable;
import javax.enterprise.context.RequestScoped;
import javax.inject.Named;
@Named("test")
@RequestScoped
public class TestBean implements Serializable{
private String test = "test";
public String getTest() {
return test;
}
public void setTest(String test) {
this.test = test;
}
}
XHTML file:
<?xml version="1.0" encoding="UTF-8"?>
<!--
To change this template, choose Tools | Templates
and open the template in the editor.
-->
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html">
<h:head>
<title>Welcome</title>
</h:head>
<h:body>
<h3>Welcome to JSF. #{test.test}</h3>
</h:body>
</html>
WEB.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
version="2.5">
<servlet>
<servlet-name>Faces Servlet</servlet-name>
<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>/faces/*</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>new.xhtml</welcome-file>
</welcome-file-list>
<context-param>
<param-name>javax.faces.PROJECT_STAGE</param-name>
<param-value>Development</param-value>
</context-param>
</web-app>
Upvotes: 0
Views: 656
Reputation: 1108742
If JSF did not find the bean, you would not have seen #{test.test}
, but simply an empty string in place of that EL expression. That the EL expression is not been evaluated has a different cause: the current HTTP request did not invoke the FacesServlet
at all and hence it was not able to perform all the JSF works for you. In order to invoke it, you need to make sure that the request URL as you see in browser's address bar matches the URL pattern of the FacesServlet
as definied in web.xml
.
Another evidence can be found by looking at the HTML source in webbrowser by rightclick, View Source. You would have noticed that all those <h:xxx>
tags are not been parsed at all. The FacesServlet
is also the one responsible for that job.
Imagine that your webapp runs on http://example.com/context/
and you have a Facelet file /page.xhtml
then there are following scenarios depending on the URL pattern of the FacesServlet
:
*.jsf
, then you need to open by http://example.com/context/page.jsf
*.faces
, then you need to open by http://example.com/context/page.faces
/faces/*
, then you need to open by http://example.com/context/faces/page.xhtml
An alternative is to just map it on an URL pattern of *.xhtml
. This way you never need to worry about virtual URLs.
Upvotes: 4
Reputation: 1790
You need to store faces-config.xml and web.xml inside WEB-INF folder. The xhtml files should be inside WebContent.
Upvotes: 0