I\'ve looked at a few resources for JSF and facelets, but don\'t understand a few configuration points. What\'s the distinction between:
It is not clear that where do you want to see the expected "hello fred" output. In the example you use ui:insert, but it for templates.
if you want to use the hello method in the bean you will need to use an EL expression and for the output a h:outputLabel tag:
<h:outputLabel value="#{helloWorld.hello('fred')}" />
Update1 (if JSF code not processed):
You should check your web.xml. It have to contains a servlet and a listener like this:
<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>
</servlet-mapping>
Note: of you use .xhtml or .hello or something else, you have to match the url-pattern of the server-mapping.
The desired output (to an extent), in that "bar" is output, from the Hello bean, below:
thufir@dur:~$
thufir@dur:~$ lynx http://localhost:8080/Birds/falcon.xhtml -dump
The Happy Birds Directory
Contents table
__________________________________________________________________
[1]Home
[2]Parrot
[3]Eagle
[4]Falcon
Falcon
The Happy Birds Directory contains birds. bean says bar
References
1. http://localhost:8080/Birds/falcon.xhtml
2. http://localhost:8080/Birds/falcon.xhtml
3. http://localhost:8080/Birds/falcon.xhtml
4. http://localhost:8080/Birds/falcon.xhtml
thufir@dur:~$
index.xhtml:
<!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:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core">
<body>
This and everything before will be ignored
<ui:composition template="template.xhtml">
<ui:define name="navigation">
<ui:include src="menu.xhtml"/>
</ui:define>
</ui:composition>
This and everything after will be ignored
</body>
</html>
menu:
<!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:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core">
<body>
This and everything before will be ignored
<ui:composition>
<h3>Contents table</h3>
<hr/>
<h:panelGrid columns="1">
<h:commandLink value="Home" action="home" />
<h:commandLink value="Parrot"
action="parrot" />
<h:commandLink value="Eagle"
action="eagle" />
<h:commandLink value="Falcon"
action="falcon" />
</h:panelGrid>
</ui:composition>
This and everything after will be ignored
</body>
</html>
parrot:
<!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:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core">
<body>
This and everything before will be ignored
<ui:composition template="template.xhtml">
<ui:define name="navigation">
<ui:include src="menu.xhtml"/>
</ui:define>
<ui:define name="main">
<h1>Parrot</h1>
<p>
Parrots are interesting birds...
</p>
</ui:define>
</ui:composition>
This and everything after will be ignored
</body>
</html>
the falcon, speaks, to an extent:
<!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:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core">
<body>
This and everything before will be ignored
<ui:composition template="template.xhtml">
<ui:define name="navigation">
<ui:include src="menu.xhtml"/>
</ui:define>
<ui:define name="main">
<h1>Falcon</h1>
<p>
<p>The Happy Birds Directory
contains #{directoryBean.totalCount} birds.
bean says #{hello.foo()}
</p>
</p>
</ui:define>
</ui:composition>
This and everything after will be ignored
</body>
</html>
however, output from the directoryBean
doesn't get put into the web page.
the template:
<?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:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core">
<head>
<title>The Happy Birds Directory</title>
<style type="text/css">
<!--
.box {
float: right;
width: 50%;
border: black dotted 1px;
padding: 5px
}
-->
</style>
</head>
<body>
<h:form>
<h1>The Happy Birds Directory</h1>
<div class="box">
<ui:insert name="navigation"/>
</div>
<ui:insert name="main">
Welcome to the nest!
</ui:insert>
</h:form>
</body>
</html>
directory bean:
package dur;
import javax.faces.bean.SessionScoped;
import javax.inject.Named;
@Named
@SessionScoped
public class DirectoryBean {
private int totalCount = 99;
public DirectoryBean() {
}
public int getTotalCount() {
System.out.println(totalCount);
return totalCount;
}
}
hello bean (note that it's @ManagedBean):
package dur;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.inject.Named;
@Named
@SessionScoped
@ManagedBean(name = "hello")
public class Hello {
public Hello() {
}
public String foo() {
return "bar";
}
public String hi(String name) {
return "hi " + name;
}
}
the web.xml:
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.1" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd">
<context-param>
<param-name>javax.faces.DEFAULT_SUFFIX</param-name>
<param-value>.xhtml</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>*.xhtml</url-pattern>
</servlet-mapping>
<session-config>
<session-timeout>
30
</session-timeout>
</session-config>
<welcome-file-list>
<welcome-file>index.xhtml</welcome-file>
</welcome-file-list>
</web-app>