java.lang.ClassNotFoundException: org.apache.myfaces.webapp.StartupServletContextListener JSF 2

Eccezione:

SEVERE: Error configuring application listener of class org.apache.myfaces.webapp.StartupServletContextListener
java
.lang.ClassNotFoundException: org.apache.myfaces.webapp.StartupServletContextListener
at org
.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1387)
at org
.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1233)
at org
.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:3786)
at org
.apache.catalina.core.StandardContext.start(StandardContext.java:4342)
at org
.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)
at org
.apache.catalina.core.StandardHost.start(StandardHost.java:719)
at org
.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)
at org
.apache.catalina.core.StandardEngine.start(StandardEngine.java:443)
at org
.apache.catalina.core.StandardService.start(StandardService.java:516)
at org
.apache.catalina.core.StandardServer.start(StandardServer.java:710)
at org
.apache.catalina.startup.Catalina.start(Catalina.java:578)
at sun
.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun
.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun
.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java
.lang.reflect.Method.invoke(Method.java:597)
at org
.apache.catalina.startup.Bootstrap.start(Bootstrap.java:288)
at org
.apache.catalina.startup.Bootstrap.main(Bootstrap.java:413)

Soluzione:
Mancano alcuni jar delle MyFaces. Scaricare i file da qui e metterli nella cartella /WEB-INF/lib

f:ajax tag JSF 2.0

f:ajax è un tag JSF che aggiunge il meccanismo delle request asincrone a molti componenti UI. 

pagina con supporto ajax:


ProvaAjax.xhmtl

<?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:f=”http://java.sun.com/jsf/core”      
      xmlns:h=”http://java.sun.com/jsf/html”>

    <h:body>
    <h3>JSF 2.0 + Ajax Hello World Example</h3>

    <h:form>
      <h:inputText id=”name” value=”#{provaTag.name}” ></h:inputText>
      <h:commandButton value=”Try Me” >
    <f:ajax execute=”name” render=”output” listener=”#{provaTag.handleEvent}” />
      </h:commandButton>

      <h2><h:outputText id=”output” value=”#{provaTag.message}” /></h2>
    </h:form>

    </h:body>
</html>

nel tag f:ajax:
            – execute=”name”, indica che il componente con id “name” deve essere mandato al server.
            – render=”output”, indica che il componente con id “output” dovrà, dopo la request ajax, essere aggiornato.
            – listener=“#{provaTag.handleEvent}”, indica il metodo del bean da chiamare.

ProvaTag.java

package com;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.event.AjaxBehaviorEvent;

import java.io.Serializable;

@ManagedBean
@SessionScoped
public class ProvaTag implements Serializable {

private static final long serialVersionUID = 1L;

private String name;
private String message;

public String getName() {
  return name;
}

public void setName(String name) {
this.name = name;
}

public String getMessage(){
return message;
}

public void setMessage(String message) {
this.message = message;
}

public void handleEvent(AjaxBehaviorEvent event) {
       message = “Hello World:”+ name;
   }
 
}


risultato:



cliccando sul tasto “Try Me”:






ui:repeat JSF 2

ui:repeat è un tag  per visualizzare  una lista di oggetti in una tabella HTML.
Creare una classe User che contiene le informazioni da visualizzare:

User.java

package com;
public class User {
private String name;
private String surname;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSurname() {
return surname;
}
public void setSurname(String surname) {
this.surname = surname;
}
}

Creare un backing bean

TableExampleBean

package com;

import java.util.ArrayList;
import java.util.List;

import javax.annotation.PostConstruct;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;

@ManagedBean
@SessionScoped
public class TableExampleBean {

private List<User> users;

@PostConstruct
public void init() {
users = new ArrayList<User>();

User user = new User();
user.setName(“Paperino”);
user.setSurname(“Rossi”);
users.add(user);

user = new User();
user.setName(“Pippo”);
user.setSurname(“Rossi”);
users.add(user);

user = new User();
user.setName(“Pluto”);
user.setSurname(“Rossi”);
users.add(user);

}

public List<User> getUsers() {
return users;
}

public void setUsers(List<User> users) {
this.users = users;
}

}

Creare la pagina xhtml contenente il tag

showUsers.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:f=”http://java.sun.com/jsf/core”
xmlns:h=”http://java.sun.com/jsf/html”
xmlns:ui=”http://java.sun.com/jsf/facelets”
xmlns:p=”http://primefaces.org/ui”
xmlns:c=”http://java.sun.com/jsp/jstl/core”>
<h:head>
</h:head>
<h:body>
<h:form>
 <table> <ui:repeat var=”user” value=”#{tableExampleBean.users}”> <tr> <td>#{user.name}</td> <td>#{user.surname}</td> </tr> </ui:repeat> </table>
</h:form>
</h:body>
</html>

Output visualizzato: