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

adds add form.

parent 790f1c6c
Branches
Tags
No related merge requests found
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" My-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 My-H2-pool jdbc/my-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;
}
} }
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 Person newPerson = new Person();
@Getter
private Person addedPerson = new Person();
@Transactional
public void addPerson() {
FacesMessage facesMessage;
personDAO.persist(addedPerson = Person.builder().name(newPerson.getName()).build());
FacesContext.getCurrentInstance().addMessage("growl-id", new FacesMessage(FacesMessage.SEVERITY_INFO, "Person added", addedPerson.getName() + "(" + addedPerson.getUuid() + ")"));
}
}
package fr.univtln.bruno.jee91.jsf;
import jakarta.enterprise.context.RequestScoped;
import jakarta.faces.application.FacesMessage;
import jakarta.faces.context.FacesContext;
import jakarta.inject.Named;
@Named
@RequestScoped
public class GrowlView {
public void addMessage(FacesMessage.Severity severity, String summary, String detail) {
FacesContext.getCurrentInstance().
addMessage(null, new FacesMessage(severity, summary, detail));
}
public void showInfo() {
addMessage(FacesMessage.SEVERITY_INFO, "Info Message", "Message Content");
}
public void showWarn() {
addMessage(FacesMessage.SEVERITY_WARN, "Warn Message", "Message Content");
}
public void showError() {
addMessage(FacesMessage.SEVERITY_ERROR, "Error Message", "Message Content");
}
public void showSticky() {
FacesContext.getCurrentInstance().addMessage("sticky-key", new FacesMessage(FacesMessage.SEVERITY_INFO, "Sticky Message", "Message Content"));
}
public void showMultiple() {
addMessage(FacesMessage.SEVERITY_INFO, "Message 1", "Message Content");
addMessage(FacesMessage.SEVERITY_INFO, "Message 2", "Message Content");
addMessage(FacesMessage.SEVERITY_INFO, "Message 3", "Message Content");
}
}
\ No newline at end of file
...@@ -10,7 +10,7 @@ import java.util.List; ...@@ -10,7 +10,7 @@ import java.util.List;
@Named @Named
@RequestScoped @RequestScoped
public class SampleBean { public class ViewPersonBean {
@Inject @Inject
PersonDAO personDAO; PersonDAO personDAO;
...@@ -24,4 +24,5 @@ public class SampleBean { ...@@ -24,4 +24,5 @@ public class SampleBean {
public List<Person> getPersons() { public List<Person> getPersons() {
return personDAO.findAll(); return personDAO.findAll();
} }
} }
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
<persistence-unit name="myappPU" transaction-type="JTA"> <persistence-unit name="myappPU" transaction-type="JTA">
<jta-data-source>jdbc/my-h2-pool</jta-data-source> <jta-data-source>jdbc/my-h2-pool</jta-data-source>
<class>fr.univtln.bruno.samples.jee91.dao.Person</class> <class>fr.univtln.bruno.samples.jee91.dao.Person</class>
<validation-mode>CALLBACK</validation-mode>
<properties> <properties>
<property name="jakarta.persistence.schema-generation.database.action" value="drop-and-create" /> <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.action" value="drop-and-create" />
......
...@@ -3,10 +3,10 @@ ...@@ -3,10 +3,10 @@
xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee https://jakarta.ee/xml/ns/jakartaee/web-app_5_0.xsd" xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee https://jakarta.ee/xml/ns/jakartaee/web-app_5_0.xsd"
version="5.0"> version="5.0">
<context-param> <!--context-param>
<param-name>jakarta.faces.PROJECT_STAGE</param-name> <param-name>jakarta.faces.PROJECT_STAGE</param-name>
<param-value>Development</param-value> <param-value>Development</param-value>
</context-param> </context-param-->
<servlet> <servlet>
<servlet-name>Faces Servlet</servlet-name> <servlet-name>Faces Servlet</servlet-name>
...@@ -26,4 +26,19 @@ ...@@ -26,4 +26,19 @@
<welcome-file-list> <welcome-file-list>
<welcome-file>index.xhtml</welcome-file> <welcome-file>index.xhtml</welcome-file>
</welcome-file-list> </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> </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>
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:p="http://primefaces.org/ui">
<h:head>
</h:head>
<h:body>
<p:spinner />
<div class="card">
<h:form>
<p:growl id="growl" showDetail="true"/>
<p:growl id="growl-sticky" for="sticky-key" showDetail="true" sticky="true"/>
<h5 class="p-mt-0">Severities</h5>
<p:commandButton actionListener="#{growlView.showInfo}" update="growl" value="Info" styleClass="p-mr-2"
style="width: 10rem"/>
<p:commandButton actionListener="#{growlView.showWarn}" update="growl" value="Warn"
styleClass="p-mr-2 ui-button-warning" style="width: 10rem"/>
<p:commandButton actionListener="#{growlView.showError}" update="growl" value="Error"
styleClass="ui-button-danger" style="width: 10rem"/>
<h5>Multiple</h5>
<p:commandButton actionListener="#{growlView.showMultiple}" update="growl" value="Multiple" style="width: 10rem"
styleClass="ui-button-outlined"/>
<h5>Sticky</h5>
<p:commandButton actionListener="#{growlView.showSticky}" update="growl-sticky" value="Info"
style="width: 10rem" styleClass="ui-button-help"/>
</h:form>
</div>
</h:body>
</html>
\ No newline at end of file
<!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" <html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://xmlns.jcp.org/jsf/html" xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core" xmlns:f="http://java.sun.com/jsf/core"
xmlns:p="http://primefaces.org/ui" xmlns:p="http://primefaces.org/ui">
>
<h:head> <h:head>
<title>Hello World JSF 3</title>
</h:head> </h:head>
<h:body> <h:body>
<h3 style="text-align: center">#{sampleBean.message}</h3> <h3 style="text-align: center">#{viewPersonBean.message}</h3>
<h:dataTable value="#{sampleBean.persons}" var="person"
styleClass="order-table"
headerClass="order-table-header"
rowClasses="order-table-odd-row,order-table-even-row">
<h:column>
<f:facet name="header">UUID</f:facet>
#{person.uuid}
</h:column>
<h:column>
<f:facet name="header">Name</f:facet>
#{person.name}
</h:column>
</h:dataTable>
<h:form>
<div class="card"> <div class="card">
<p:dataTable var="person" value="#{sampleBean.persons}"> <p:dataTable var="person" value="#{viewPersonBean.persons}">
<p:column headerText="UUID"> <p:column headerText="UUID">
<h:outputText value="#{person.uuid}"/> <h:outputText value="#{person.uuid}"/>
</p:column> </p:column>
...@@ -40,7 +21,6 @@ ...@@ -40,7 +21,6 @@
</p:column> </p:column>
</p:dataTable> </p:dataTable>
</div> </div>
</h:form>
</h:body> </h:body>
</html> </html>
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:p="http://primefaces.org/ui">
<h:head>
</h:head>
<h:body>
<p:spinner />
</h:body>
</html>
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment