Skip to content
Snippets Groups Projects
Commit a20c42b8 authored by Emmanuel Bruno's avatar Emmanuel Bruno
Browse files

Merge branch 'feature/jsf' into develop

parents 685a9fc3 bfde7e5a
No related branches found
No related tags found
No related merge requests found
Showing
with 443 additions and 28 deletions
...@@ -3,8 +3,6 @@ utils/src/main/resources/* ...@@ -3,8 +3,6 @@ utils/src/main/resources/*
*.jks *.jks
*.p12 *.p12
target/ target/
.classpath
.project
.settings/ .settings/
Thumbs.db Thumbs.db
......
...@@ -8,7 +8,7 @@ import java.util.List; ...@@ -8,7 +8,7 @@ import java.util.List;
import java.util.UUID; import java.util.UUID;
public class PersonDAO { public class PersonDAO {
private EntityManager entityManager; private final EntityManager entityManager;
@Inject @Inject
public PersonDAO(@H2Database EntityManager entityManager) { public PersonDAO(@H2Database EntityManager entityManager) {
...@@ -16,7 +16,7 @@ public class PersonDAO { ...@@ -16,7 +16,7 @@ public class PersonDAO {
} }
public List<Person> findAll() { public List<Person> findAll() {
return entityManager.createNamedQuery("Person.findAll").getResultList(); return entityManager.createNamedQuery("Person.findAll", Person.class).getResultList();
} }
public UUID persist(Person person) { public UUID persist(Person person) {
......
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="https://jakarta.ee/xml/ns/jakartaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee https://jakarta.ee/xml/ns/jakartaee/beans_3_0.xsd"
bean-discovery-mode="all">
</beans>
\ No newline at end of file
# syntax=docker/dockerfile:1 # syntax=docker/dockerfile:1.3
### First we build the application in docker in a controlled env ### First we build the application in docker in a controlled env
FROM maven:3.8.3-eclipse-temurin-11 as build FROM maven:3.8.3-eclipse-temurin-11 as build
...@@ -7,8 +7,11 @@ COPY ./ /app/ ...@@ -7,8 +7,11 @@ COPY ./ /app/
RUN --mount=type=cache,id=mvncache,target=/root/.m2/repository,rw \ RUN --mount=type=cache,id=mvncache,target=/root/.m2/repository,rw \
mvn -B clean package mvn -B clean package
### Then we add the builded war to a JEE server. ### Then we add the builded war to a JEE server.
FROM payara/server-full:5.2021.9-jdk11 as server #FROM payara/server-full:5.2021.9-jdk11 as server
FROM brunoe/payara:jdk11-6 as server
ARG STORE_PASSWORD=changeit ARG STORE_PASSWORD=changeit
## Download the JDBC driver ## Download the JDBC driver
USER root USER root
...@@ -16,7 +19,9 @@ RUN apt-get update && \ ...@@ -16,7 +19,9 @@ RUN apt-get update && \
apt-get install -y wget unzip && \ apt-get install -y wget unzip && \
rm -rf /var/lib/apt/lists/* && \ rm -rf /var/lib/apt/lists/* && \
wget https://repo1.maven.org/maven2/com/h2database/h2/1.4.200/h2-1.4.200.jar \ wget https://repo1.maven.org/maven2/com/h2database/h2/1.4.200/h2-1.4.200.jar \
-O /tmp/h2.jar -O /tmp/h2.jar && \
cp /tmp/h2.jar /opt/payara/appserver/glassfish/domains/domain1/lib/h2.jar
USER payara USER payara
## This script adds a jdbc connection pool and ressource ## This script adds a jdbc connection pool and ressource
COPY docker/post-boot-commands.asadmin $POSTBOOT_COMMANDS COPY docker/post-boot-commands.asadmin $POSTBOOT_COMMANDS
...@@ -29,8 +34,14 @@ COPY --from=build /app/utils/src/main/resources/mycert-pub.p12 /app/utils/src/m ...@@ -29,8 +34,14 @@ COPY --from=build /app/utils/src/main/resources/mycert-pub.p12 /app/utils/src/m
RUN keytool -importkeystore -noprompt -destkeystore /opt/payara/appserver/glassfish/domains/domain1/config/keystore.jks -srckeystore /tmp/mycert.p12 -srcstoretype PKCS12 -alias mycert -srcstorepass storepass -deststorepass ${STORE_PASSWORD} -deststoretype pkcs12 && \ RUN keytool -importkeystore -noprompt -destkeystore /opt/payara/appserver/glassfish/domains/domain1/config/keystore.jks -srckeystore /tmp/mycert.p12 -srcstoretype PKCS12 -alias mycert -srcstorepass storepass -deststorepass ${STORE_PASSWORD} -deststoretype pkcs12 && \
keytool -importcert -noprompt -trustcacerts -destkeystore /opt/payara/appserver/glassfish/domains/domain1/config/cacerts.jks -file /tmp/mycert.crt -alias mycert -srcstorepass storepass -deststorepass ${STORE_PASSWORD} -deststoretype pkcs12 keytool -importcert -noprompt -trustcacerts -destkeystore /opt/payara/appserver/glassfish/domains/domain1/config/cacerts.jks -file /tmp/mycert.crt -alias mycert -srcstorepass storepass -deststorepass ${STORE_PASSWORD} -deststoretype pkcs12
#RUN wget https://github.com/eclipse-ee4j/mojarra/releases/download/3.0.2-RELEASE/jakarta.faces-3.0.2.jar \
# -O /opt/payara/appserver/glassfish/modules/jakarta.faces.jar
#RUN wget https://github.com/eclipse-ee4j/mojarra/releases/download/2.3.17-RELEASE/jakarta.faces-2.3.17.jar \
# -O /opt/payara/appserver/glassfish/modules/jakarta.faces.jar
FROM server as production FROM server as production
COPY --from=build /app/restApp/target/*.war \ #COPY --from=build /app/restApp/target/*.war \
$DEPLOY_DIR # $DEPLOY_DIR
COPY --from=build /app/wsApp/target/*.war \ #COPY --from=build /app/wsApp/target/*.war \
# $DEPLOY_DIR
COPY --from=build /app/jsf/target/*.war \
$DEPLOY_DIR $DEPLOY_DIR
\ No newline at end of file
# FROM azul/zulu-openjdk:8u222 as mypayara
#FROM eclipse-temurin:17-jdk
FROM eclipse-temurin:11-jdk
# Default payara ports to expose
# 4848: admin console
# 9009: debug port (JPDA)
# 8080: http
# 8181: https
EXPOSE 4848 9009 8080 8181
# Payara version (5.183+)
#ARG PAYARA_VERSION=5.2021.9
ARG PAYARA_VERSION=6.2021.1.Alpha1
ARG PAYARA_PKG=https://search.maven.org/remotecontent?filepath=fish/payara/distributions/payara/${PAYARA_VERSION}/payara-${PAYARA_VERSION}.zip
#ARG PAYARA_SHA1=81c43f3c537ec74a813b48172758866615e1e792
ARG PAYARA_SHA1=0262f8af7e52b318109ed43f8a31a1e93f111bbf
ARG TINI_VERSION=v0.19.0
# Initialize the configurable environment variables
ENV HOME_DIR=/opt/payara\
PAYARA_DIR=/opt/payara/appserver\
SCRIPT_DIR=/opt/payara/scripts\
CONFIG_DIR=/opt/payara/config\
DEPLOY_DIR=/opt/payara/deployments\
PASSWORD_FILE=/opt/payara/passwordFile\
# Payara Server Domain options
DOMAIN_NAME=domain1\
ADMIN_USER=admin\
ADMIN_PASSWORD=admin\
# Utility environment variables
JVM_ARGS=\
PAYARA_ARGS=\
DEPLOY_PROPS=\
POSTBOOT_COMMANDS=/opt/payara/config/post-boot-commands.asadmin\
PREBOOT_COMMANDS=/opt/payara/config/pre-boot-commands.asadmin
ENV PATH="${PATH}:${PAYARA_DIR}/bin"
# Create and set the Payara user and working directory owned by the new user
RUN groupadd -g 1000 payara && \
useradd -u 1000 -M -s /bin/bash -d ${HOME_DIR} payara -g payara && \
echo payara:payara | chpasswd && \
mkdir -p ${DEPLOY_DIR} && \
mkdir -p ${CONFIG_DIR} && \
mkdir -p ${SCRIPT_DIR} && \
chown -R payara: ${HOME_DIR} && \
# Install required packages
apt-get update && \
apt-get install -y wget unzip gpg && \
rm -rf /var/lib/apt/lists/*
# Install tini as minimized init system
RUN wget --no-verbose -O /tini https://github.com/krallin/tini/releases/download/${TINI_VERSION}/tini && \
wget --no-verbose -O /tini.asc https://github.com/krallin/tini/releases/download/${TINI_VERSION}/tini.asc && \
gpg --batch --keyserver "keyserver.ubuntu.com" --recv-keys 595E85A6B1B4779EA4DAAEC70B588DFF0527A9B7 && \
gpg --batch --verify /tini.asc /tini && \
chmod +x /tini
USER payara
WORKDIR ${HOME_DIR}
# Download and unzip the Payara distribution
RUN ulimit -n 1024 ; wget --no-verbose -O payara.zip ${PAYARA_PKG} && \
echo "${PAYARA_SHA1} *payara.zip" | sha1sum -c - && \
unzip -qq payara.zip -d ./ && \
mv payara*/ appserver && \
# Configure the password file for configuring Payara
echo "AS_ADMIN_PASSWORD=\nAS_ADMIN_NEWPASSWORD=${ADMIN_PASSWORD}" > /tmp/tmpfile && \
echo "AS_ADMIN_PASSWORD=${ADMIN_PASSWORD}" >> ${PASSWORD_FILE} && \
# Configure the payara domain
${PAYARA_DIR}/bin/asadmin --user ${ADMIN_USER} --passwordfile=/tmp/tmpfile change-admin-password --domain_name=${DOMAIN_NAME} && \
${PAYARA_DIR}/bin/asadmin --user=${ADMIN_USER} --passwordfile=${PASSWORD_FILE} start-domain ${DOMAIN_NAME} && \
${PAYARA_DIR}/bin/asadmin --user=${ADMIN_USER} --passwordfile=${PASSWORD_FILE} enable-secure-admin && \
for MEMORY_JVM_OPTION in $(${PAYARA_DIR}/bin/asadmin --user=${ADMIN_USER} --passwordfile=${PASSWORD_FILE} list-jvm-options | grep "Xm[sx]"); do\
${PAYARA_DIR}/bin/asadmin --user=${ADMIN_USER} --passwordfile=${PASSWORD_FILE} delete-jvm-options $MEMORY_JVM_OPTION;\
done && \
# FIXME: when upgrading this container to Java 10+, this needs to be changed to '-XX:+UseContainerSupport' and '-XX:MaxRAMPercentage'
# ${PAYARA_DIR}/bin/asadmin --user=${ADMIN_USER} --passwordfile=${PASSWORD_FILE} create-jvm-options '-XX\:+UnlockExperimentalVMOptions:-XX\:+UseCGroupMemoryLimitForHeap:-XX\:MaxRAMFraction=1' && \
${PAYARA_DIR}/bin/asadmin --user=${ADMIN_USER} --passwordfile=${PASSWORD_FILE} create-jvm-options '-XX\:+UseContainerSupport:-XX\:MaxRAMPercentage=100' && \
${PAYARA_DIR}/bin/asadmin --user=${ADMIN_USER} --passwordfile=${PASSWORD_FILE} set-log-attributes com.sun.enterprise.server.logging.GFFileHandler.logtoFile=false && \
${PAYARA_DIR}/bin/asadmin --user=${ADMIN_USER} --passwordfile=${PASSWORD_FILE} stop-domain ${DOMAIN_NAME} && \
# Cleanup unused files
rm -rf \
/tmp/tmpFile \
payara.zip \
${PAYARA_DIR}/glassfish/domains/${DOMAIN_NAME}/osgi-cache \
${PAYARA_DIR}/glassfish/domains/${DOMAIN_NAME}/logs
# ${PAYARA_DIR}/glassfish/domains/domain1
# Copy across docker scripts
COPY --chown=payara:payara bin/*.sh ${SCRIPT_DIR}/
RUN mkdir -p ${SCRIPT_DIR}/init.d && \
chmod +x ${SCRIPT_DIR}/*
ENTRYPOINT ["/tini", "--"]
CMD ${SCRIPT_DIR}/entrypoint.sh
COMPOSE_DOCKER_CLI_BUILD=1 DOCKER_BUILDKIT=1 docker build -t brunoe/payara:jdk11-6 .
docker run -it -p 4848:4848 -p 8080 brunoe/payara
set-hazelcast-configuration --enabled=true --dynamic=true set-hazelcast-configuration --enabled=true --dynamic=true
add-library /tmp/h2.jar add-library /tmp/h2.jar
create-jdbc-connection-pool --datasourceclassname org.h2.jdbcx.JdbcDataSource --restype javax.sql.ConnectionPoolDataSource --property password=password:user=user:url="jdbc:h2:tcp://db:9092/payara;MODE=PostgreSQL;DATABASE_TO_LOWER=TRUE" H2-pool create-jdbc-connection-pool --datasourceclassname org.h2.jdbcx.JdbcDataSource --restype javax.sql.ConnectionPoolDataSource --property password=password:user=user:url="jdbc:h2:tcp://db:9092/payara;MODE=PostgreSQL;DATABASE_TO_LOWER=TRUE;DEFAULT_NULL_ORDERING=HIGH" My-H2-pool
create-jdbc-resource --connectionpoolid H2-pool jdbc/h2-pool create-jdbc-resource --connectionpoolid My-H2-pool jdbc/my-h2-pool
# set configs.config.server-config.network-config.protocols.protocol.http-listener-2.ssl.cert-nickname=mycert # set configs.config.server-config.network-config.protocols.protocol.http-listener-2.ssl.cert-nickname=mycert
...@@ -2,40 +2,51 @@ package fr.univtln.bruno.samples.jee91.dao; ...@@ -2,40 +2,51 @@ package fr.univtln.bruno.samples.jee91.dao;
import jakarta.json.bind.annotation.JsonbTransient; import jakarta.json.bind.annotation.JsonbTransient;
import jakarta.persistence.*; import jakarta.persistence.*;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.Pattern;
import jakarta.xml.bind.annotation.XmlRootElement; import jakarta.xml.bind.annotation.XmlRootElement;
import lombok.AccessLevel; import lombok.*;
import lombok.Getter;
import lombok.Setter;
import lombok.experimental.FieldDefaults; import lombok.experimental.FieldDefaults;
import java.io.Serializable;
import java.util.UUID; import java.util.UUID;
@AllArgsConstructor(staticName = "of")
@NoArgsConstructor
@ToString(onlyExplicitlyIncluded = true)
@Table(name = "PERSON") @Table(name = "PERSON")
@Entity @Entity
@Getter @Getter
@Setter @Setter
@NamedQueries({
@NamedQuery(name = "Person.findAll", @NamedQuery(name = "Person.findAll",
query = "select p from Person p"), query = "select p from Person p")
@NamedQuery( @NamedQuery(
name = "Person.findAllOrderedByName", name = "Person.findAllOrderedByName",
query = "SELECT p FROM Person p ORDER BY p.name"), query = "SELECT p FROM Person p ORDER BY p.name")
@NamedQuery( @NamedQuery(
name = "Person.findByUUID", name = "Person.findByUUID",
query = "SELECT p FROM Person p WHERE p.uuid=:uuid") query = "SELECT p FROM Person p WHERE p.uuid=:uuid")
})
@XmlRootElement @XmlRootElement
@FieldDefaults(level = AccessLevel.PRIVATE) @FieldDefaults(level = AccessLevel.PRIVATE)
public class Person { public class Person implements Serializable {
@Id @Id
@GeneratedValue(strategy = GenerationType.IDENTITY) @GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "ID") @Column(name = "ID")
@JsonbTransient @JsonbTransient
long id; long id;
@ToString.Include
@Column(name = "NAME") @Column(name = "NAME")
@NotBlank
@Pattern(regexp = "[A-Z][a-z]+", message = "Le nom doit commencer par une majuscule suivie de minuscules")
String name; String name;
@ToString.Include
@Column(name = "UUID", updatable = false, nullable = false, unique = true) @Column(name = "UUID", updatable = false, nullable = false, unique = true)
UUID uuid = UUID.randomUUID(); UUID uuid = UUID.randomUUID();
@Builder
public Person(String name) {
this.name = name;
}
} }
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>jee9.1</artifactId>
<groupId>fr.univtln.bruno.samples.jee91</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>jsf</artifactId>
<packaging>war</packaging>
<properties>
<primefaces.version>11.0.0-RC2</primefaces.version>
<!--primefaces.version>11.0.0-SNAPSHOT</primefaces.version-->
<omnifaces.version>4.0-M12</omnifaces.version>
<all-themes.version>1.0.10</all-themes.version>
</properties>
<!--repositories>
<repository>
<id>prime-repo</id>
<name>PrimeFaces Maven Repository</name>
<url>https://repository.primefaces.org</url>
<layout>default</layout>
</repository>
</repositories-->
<dependencies>
<dependency>
<groupId>fr.univtln.bruno.samples.jee91</groupId>
<artifactId>business</artifactId>
<version>1.0-SNAPSHOT</version>
<!--type>ejb-client</type-->
</dependency>
<dependency>
<groupId>fr.univtln.bruno.samples.jee91</groupId>
<artifactId>dao</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>jakarta.platform</groupId>
<artifactId>jakarta.jakartaee-api</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter</artifactId>
</dependency>
<!--dependency>
<groupId>org.omnifaces</groupId>
<artifactId>omnifaces</artifactId>
<version>${omnifaces.version}</version>
</dependency-->
<dependency>
<groupId>org.primefaces</groupId>
<artifactId>primefaces</artifactId>
<version>${primefaces.version}</version>
<classifier>jakarta</classifier>
</dependency>
<!--dependency>
<groupId>org.primefaces.themes</groupId>
<artifactId>all-themes</artifactId>
<version>${all-themes.version}</version>
</dependency-->
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>3.3.2</version>
</plugin>
</plugins>
</build>
</project>
\ No newline at end of file
package fr.univtln.bruno.jee91.jsf;
import fr.univtln.bruno.samples.jee91.dao.Person;
import fr.univtln.bruno.samples.jee91.dao.PersonDAO;
import jakarta.faces.application.FacesMessage;
import jakarta.faces.context.FacesContext;
import jakarta.faces.view.ViewScoped;
import jakarta.inject.Inject;
import jakarta.inject.Named;
import jakarta.transaction.Transactional;
import lombok.Getter;
import java.io.Serializable;
@Named
@ViewScoped
public class AddPersonView implements Serializable {
private static final long serialVersionUID = 1L;
@Inject
private transient PersonDAO personDAO;
@Getter
private final Person newPerson = new Person();
@Getter
private Person addedPerson = new Person();
@Transactional
public void addPerson() {
addedPerson = Person.builder().name(newPerson.getName()).build();
personDAO.persist(addedPerson);
FacesContext.getCurrentInstance().addMessage("growl-id", new FacesMessage(FacesMessage.SEVERITY_INFO, "Person added", addedPerson.getName() + "(" + addedPerson.getUuid() + ")"));
}
}
package fr.univtln.bruno.jee91.jsf;
import fr.univtln.bruno.samples.jee91.dao.Person;
import fr.univtln.bruno.samples.jee91.dao.PersonDAO;
import jakarta.enterprise.context.RequestScoped;
import jakarta.inject.Inject;
import jakarta.inject.Named;
import java.util.List;
@Named
@RequestScoped
public class ViewPersonBean {
@Inject
PersonDAO personDAO;
private final String message = "Hello";
public String getMessage() {
return this.message;
}
public List<Person> getPersons() {
return personDAO.findAll();
}
}
log4j.rootLogger=debug, stdout, R
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
# Pattern to output the caller's file name and line number.
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] (%F:%L) - %m%n
log4j.appender.R=org.apache.log4j.RollingFileAppender
log4j.appender.R.File=wqClient.log
log4j.appender.R.MaxFileSize=100KB
# Keep one backup file
log4j.appender.R.MaxBackupIndex=1
log4j.appender.R.layout=org.apache.log4j.PatternLayout
log4j.appender.R.layout.ConversionPattern=%p %t %c - %m%n
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="https://jakarta.ee/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="https://jakarta.ee/xml/ns/persistence https://jakarta.ee/xml/ns/persistence/persistence_3_0.xsd"
version="3.0">
<persistence-unit name="myappPU" transaction-type="JTA">
<jta-data-source>jdbc/my-h2-pool</jta-data-source>
<class>fr.univtln.bruno.samples.jee91.dao.Person</class>
<validation-mode>CALLBACK</validation-mode>
<properties>
<property name="jakarta.persistence.schema-generation.database.action" value="drop-and-create" />
<property name="jakarta.persistence.schema-generation.scripts.action" value="drop-and-create" />
<property name="jakarta.persistence.schema-generation.scripts.create-target" value="sampleCreate.ddl" />
<property name="jakarta.persistence.schema-generation.scripts.drop-target" value="sampleDrop.ddl" />
<property name="jakarta.persistence.sql-load-script-source" value="insert.sql" />
</properties>
</persistence-unit>
</persistence>
\ No newline at end of file
INSERT INTO "public"."person" ("name", "uuid") VALUES ('Yves', 'ACED00057372000E6A6176612E7574696C2E55554944BC9903F7986D852F0200024A000C6C65617374536967426974734A000B6D6F7374536967426974737870B25A000916801FE374FCFAC5DCF94C11');
INSERT INTO "public"."person" ("name", "uuid") VALUES ('Pierre', 'ACED00057372000E6A6176612E7574696C2E55554944BC9903F7986D852F0200024A000C6C65617374536967426974734A000B6D6F7374536967426974737870B8F28F7D3945291756DAC7325DF44938');
INSERT INTO "public"."person" ("name", "uuid") VALUES ('Marie', 'ACED00057372000E6A6176612E7574696C2E55554944BC9903F7986D852F0200024A000C6C65617374536967426974734A000B6D6F73745369674269747378709AA3211A9B897403843C82366C6B450E');
INSERT INTO "public"."person" ("name", "uuid") VALUES ('Jeanne', 'ACED00057372000E6A6176612E7574696C2E55554944BC9903F7986D852F0200024A000C6C65617374536967426974734A000B6D6F7374536967426974737870BC1580AEB48C0F0C0B3C82E884AA4C3C');
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="https://jakarta.ee/xml/ns/jakartaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee https://jakarta.ee/xml/ns/jakartaee/beans_3_0.xsd"
bean-discovery-mode="all">
</beans>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<faces-config
xmlns="https://jakarta.ee/xml/ns/jakartaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee https://jakarta.ee/xml/ns/jakartaee/web-facesconfig_3_0.xsd"
version="3.0"
>
<!-- Your faces config here. -->
</faces-config>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="https://jakarta.ee/xml/ns/jakartaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee https://jakarta.ee/xml/ns/jakartaee/web-app_5_0.xsd"
version="5.0">
<!--context-param>
<param-name>jakarta.faces.PROJECT_STAGE</param-name>
<param-value>Development</param-value>
</context-param-->
<servlet>
<servlet-name>Faces Servlet</servlet-name>
<servlet-class>jakarta.faces.webapp.FacesServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<!--La servlet de JSF est configurée pour répondre à toutes les requêtes de fichiers XHTML-->
<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>
<mime-mapping>
<extension>woff</extension>
<mime-type>application/font-woff</mime-type>
</mime-mapping>
<mime-mapping>
<extension>ttf</extension>
<mime-type>application/x-font-ttf</mime-type>
</mime-mapping>
<mime-mapping>
<extension>eot</extension>
<mime-type>application/vnd.ms-fontobject</mime-type>
</mime-mapping>
</web-app>
\ No newline at end of file
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:p="http://primefaces.org/ui">
<h:head></h:head>
<h:body>
<div class="card">
<h:form>
<h3 class="p-mt-0">Add a person</h3>
<p:growl id="growl" for="growl-id" showDetail="true" skipDetailIfEqualsSummary="true"/>
<h:panelGrid columns="3" cellpadding="7">
<p:outputLabel for="fieldName" value="Name"/>
<p:inputText id="fieldName" value="#{addPersonView.newPerson.name}"/>
<p:message for="fieldName"/>
<p:commandButton value="Save" ajax="false" icon="pi pi-check" validateClient="true" styleClass="p-mr-3" action="#{addPersonView.addPerson}"/>
</h:panelGrid>
</h:form>
</div>
</h:body>
</html>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:p="http://primefaces.org/ui"
xml:lang="en">
<h:head>
<title>Person list</title>
</h:head>
<h:body>
<h3 style="text-align: center"><h:outputText value="#{viewPersonBean.message}"/></h3>
<div class="card">
<p:dataTable var="person" value="#{viewPersonBean.persons}">
<p:column headerText="UUID">
<h:outputText value="#{person.uuid}"/>
</p:column>
<p:column headerText="Name">
<h:outputText value="#{person.name}"/>
</p:column>
</p:dataTable>
</div>
</h:body>
</html>
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment