Je veux implémenter l'EE plus facilement! Je veux essayer! Donc, je voudrais exécuter JSF + CDI sur Tomcat. JSF et CDI ne fonctionnent généralement pas avec Tomcat, mais Tomcat 9 semble prendre en charge CDI, je vais donc essayer.
L'exemple d'application pour la vérification des opérations crée un écran de connexion et un écran supérieur qui transite en cas de succès. À peu près comme ça. L'environnement est le suivant.
Pour utiliser CDI, Apache OpenWebBeans
Pour utiliser JSF, vous avez besoin de Apache My Faces
.
Suivez les étapes ci-dessous pour configurer l'environnement.
Téléchargement depuis la page Apache OpenWebBeans (https://openwebbeans.apache.org/download.html).
Cette fois, j'ai téléchargé openwebeans-distribution-2.0.18-binary.zip
.
Après le téléchargement, décompressez-le.
Téléchargez depuis la page Apache MyFaces (http://myfaces.apache.org/#/core23next).
Cette fois, j'ai téléchargé myfaces-core-assembly-2.3-next-M4-bin.zip
.
Ce zip n'a pas besoin d'être décompressé. Je vais l'utiliser tel quel.
Il y a install_owb_tomcat7_myfaces.sh
dans le dossier où vous avez décompressé OpenWebBeans, alors exécutez-le.
Les arguments sont le fichier zip myfaces téléchargé et le chemin Tomcat.
./install_owb_tomcat7_myfaces.sh /Télécharger le chemin/myface-core-assembly-2.3-next-M4-bin.zip vers le chemin mcat
Une fois exécuté, le fichier jar requis sera copié dans tomcat / lib
et l'écouteur sera ajouté à context.xml.
Définissez Listener pour activer CDI et JSF. Définissez-le et mappage de servlet.
web.xml
<listener>
<listener-class>org.apache.webbeans.servlet.WebBeansConfigurationListener</listener-class>
</listener>
<listener>
<listener-class>org.apache.myfaces.webapp.StartupServletContextListener</listener-class>
</listener>
<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>
<welcome-file-list>
<welcome-file>index.xhtml</welcome-file>
</welcome-file-list>
Vous êtes maintenant prêt. CDI / JSF devrait maintenant fonctionner sur Tomcat!
Pour vérifier l'opération, je vais implémenter un exemple d'application. Tout d'abord, configurez maven.
pom.xml
<!-- Servlet -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.0</version>
<scope>provided</scope>
</dependency>
<!-- JSF -->
<dependency>
<groupId>org.apache.myfaces.core</groupId>
<artifactId>myfaces-api</artifactId>
<version>2.3-next-M4</version>
<scope>provided</scope>
</dependency>
<!-- CDI -->
<dependency>
<groupId>javax.enterprise</groupId>
<artifactId>cdi-api</artifactId>
<version>2.0</version>
<scope>provided</scope>
</dependency>
<!-- Lombok -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.12</version>
</dependency>
Ajouter fourni avec fourni pour la compilation CDI et JSF. Puisqu'il est dans tomcat / lib au moment de l'opération Tu n'as pas besoin. J'ai également présenté lombok. (Ce n'est pas obligatoire)
Dans JSF, un écran (xhtml) et un Backing Bean correspondant à l'écran sont créés. Commencez par créer un écran. Ignorez la conception et implémentez-la de manière concise.
index.xhtml
<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html>
<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:ph="http://xmlns.jcp.org/jsf/passthrough"
xmlns:f="http://java.sun.com/jsf/core">
<h:head>
<title>Échantillon JSF</title>
</h:head>
<body>
<h:messages escape="true" id="messages" showDetail="false" closable="true"/>
<h:form id="form">
<br/>
<h:inputText value="#{index.loginId}" ph:placeholder="Username" /><br/>
<h:inputSecret value="#{index.password}" ph:placeholder="Password" /><br/>
<h:commandButton action="#{index.loginEvent()}" value="S'identifier" update="@form" />
</h:form>
</body>
</html>
h: messages
est la zone où les messages sont affichés.loginEvent
définie dans BackingBean est exécutée.Ensuite, Backing Bean.
IndexBean.java
@Named("index") //・ ・ ・ ①
@ViewScoped
@Getter
@Setter
public class IndexBean implements Serializable {
private String loginId; //・ ・ ・ ②
private String password;
public String loginEvent() {
if (!loginId.isEmpty() && !password.isEmpty()) {
return "top.xhtml?redirect=true"; //・ ・ ・ ③
} else {
//・ ・ ・ ④
FacesContext context = FacesContext.getCurrentInstance();
FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_ERROR, "Erreur d'authentification", "");
context.addMessage(null, message);
return null;
}
}
}
(1) Utilisez l'annotation Named pour la définir afin qu'elle puisse être vue à partir de l'expression EL dans index.xhtml. (2) Définissez les attributs en fonction des éléments à l'écran. (3) Si quelque chose est entré à la fois dans l'ID de connexion et le mot de passe, l'écran changera. ④ Dans d'autres cas, le message s'affiche sur l'écran personnel.
Vient ensuite l'écran supérieur de la destination de transition.
top.xhtml
<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html>
<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:ph="http://xmlns.jcp.org/jsf/passthrough"
xmlns:f="http://java.sun.com/jsf/core">
<h:head>
<title>Échantillon JSF</title>
</h:head>
<body>
<h:form id="form">
<div>Écran TOP</div>
</h:form>
</body>
</html>
Un message a été affiché et la transition d'écran était possible. C'était plus facile que ce à quoi je m'attendais! c'est tout.