Vistas
En el directorio src/main/webapp creamos la carpeta images y el pegamos la siguientes imagenes:- milogo.jpg
<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:ui="http://java.sun.com/jsf/facelets"
xmlns:p="http://primefaces.org/ui">
<h:head>
</h:head>
<h:body>
<ui:insert name="header">
<ui:include src="encabezado.xhtml"></ui:include>
</ui:insert>
<ui:insert name="content">
<ui:include src="contenido.xhtml"></ui:include>
</ui:insert>
</h:body>
</html>
En el mismo directorio creamos la clase encabezado.xhtml
<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:ui="http://java.sun.com/jsf/facelets"
xmlns:p="http://primefaces.org/ui">
<h:head>
</h:head>
<h:body>
<ui:composition>
<div class="card">
<h:form>
<p:growl id="messages"/>
<p:menubar>
<p:submenu label="Porcentaje de Bateo" icon="ui-icon-document">
<p:separator />
</p:submenu>
</p:menubar>
</h:form>
</div>
</ui:composition>
</h:body>
</html>
Creamos el archivo contenido.xhtml
<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:ui="http://java.sun.com/jsf/facelets"
xmlns:p="http://primefaces.org/ui">
<h:head>
</h:head>
<h:body>
<ui:composition>
<h1>Bienvenido a Llaneros de San Luis</h1>
</ui:composition>
</h:body>
</html>
Realizamos la vista login.xhtml
<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:ui="http://java.sun.com/jsf/facelets"
xmlns:p="http://primefaces.org/ui">
<h:head>
</h:head>
<h:body>
<div style="margin:0 auto;width:70%">
<ui:composition template="plantilla.xhtml" >
<ui:define name="content" >
<h:form>
<p:growl id="messagesLogin"/>
<p:panel header="Ingresar usuario y contraseña" footer="Tutosoftware">
<h:panelGrid columns="2" cellpadding="5">
<h:outputLabel value="Email:" for="email" style="color:white" />
<p:inputText id="email" value="#{loginView.email}" required="true" label="usuario">
</p:inputText>
<h:outputLabel value="Contraseña:" for="password" style="color:white" />
<p:password id="password" value="#{loginView.password}" required="true" label="password">
</p:password>
<f:facet name="footer">
<p:commandButton value="Acceder" action="#{loginView.loginScore}" update="messagesLogin" > </p:commandButton>
</f:facet>
</h:panelGrid>
</p:panel>
</h:form>
</ui:define>
</ui:composition>
</div>
</h:body>
</html>
Creamos el segundo template que es el administrador en el mismo directorio creamos plantillaAdmin.xhtml
<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:ui="http://java.sun.com/jsf/facelets"
xmlns:p="http://primefaces.org/ui">
<h:head>
</h:head>
<h:body>
<ui:insert name="headerAdmin">
<ui:include src="encabezadoAdmin.xhtml"></ui:include>
</ui:insert>
<ui:insert name="contentAdmin">
<ui:include src="contenidoAdmin.xhtml"></ui:include>
</ui:insert>
</h:body>
</html>
Creamos el archivo encabezadoAdmin.xhtml
<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:ui="http://java.sun.com/jsf/facelets"
xmlns:p="http://primefaces.org/ui"
xmlns:c="http://java.sun.com/jstl/core">
<h:head>
</h:head>
<h:body>
<ui:composition>
<div class="card">
<h:form>
<p:growl id="messages"/>
<p:menubar>
<p:submenu label="Porcentaje de Bateo" icon="ui-icon-document">
<p:separator />
</p:submenu>
<p:submenu label="Acciones" icon="ui-icon-pencil">
<p:menuitem value="Generar Temporada" outcome="agregarTemporada" />
<p:menuitem value="Registrar Jugador" outcome="agregarJugador" />
<p:menuitem value="AgregarPorcentaje" outcome="agregarPorcentaje" />
</p:submenu>
<p:menuitem value="Salir" action="#{loginView.logout()}" icon="ui-icon-close" />
</p:menubar>
</h:form>
</div>
</ui:composition>
</h:body>
</html>
Creamos el archivo contenidoAdmin.xhtml
<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:ui="http://java.sun.com/jsf/facelets"
xmlns:p="http://primefaces.org/ui">
<h:head>
</h:head>
<h:body>
<ui:composition>
<h:form>
<p:panel header="Porcentaje de bateo" footer="Tutosoftware">
<p>Elige la opción de menú que necesites realizar.</p>
<h:graphicImage url="/images/milogo.jpg" />
</p:panel>
</h:form>
</ui:composition>
</h:body>
</html>
Creamos el archivo admin.xhtml
<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:ui="http://java.sun.com/jsf/facelets"
xmlns:p="http://primefaces.org/ui">
<h:head>
</h:head>
<h:body>
<ui:composition template="plantillaAdmin.xhtml">
</ui:composition>
</h:body>
</html>
Creamos el archivo agregarJugador.xhtml
<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:ui="http://java.sun.com/jsf/facelets"
xmlns:p="http://primefaces.org/ui">
<h:head>
</h:head>
<h:body>
<div style="margin:0 auto;width:70%">
<ui:composition template="plantillaAdmin.xhtml" >
<ui:define name="contentAdmin" >
<h:form id="form">
<p:growl id="messagesLogin"/>
<p:panel header="Agregar Jugador" footer="Tutosoftware 2021">
<h:panelGrid columns="3" cellpadding="5">
<p:outputLabel for="@next" value="Seleccionar Temporada" style="color:white" />
<p:selectOneMenu id="idTemporada" value="#{jugadorView.idTemporada}"
required="true" requiredMessage="Selecionar temporada" >
<f:selectItem itemLabel="Seleccionar Temporada" itemValue=""/>
<f:selectItems value="#{jugadorView.listaTemporada}" var="temporada"
itemLabel="#{temporada.nombreTemporada}" itemValue="#{temporada.idTemporada}" />
</p:selectOneMenu>
<p:message for="idTemporada"></p:message>
<p:photoCam widgetVar="pc" listener="#{jugadorView.oncapture}" update="photo"/>
<p:commandButton type="button" value="Capture" onclick="PF('pc').capture()"/>
<p:outputPanel id="photo">
<p:graphicImage value="#{pageContext.contextPath}/images/tmp/#{jugadorView.foto}.jpeg"
rendered="#{not empty jugadorView.foto}"/>
</p:outputPanel>
<h:outputLabel value="Nombre:" for="nombre" style="color:white" />
<p:inputText id="nombre" value="#{jugadorView.nombre}"
size="50" required="true" requiredMessage="Nombre requerido" >
</p:inputText>
<p:message for="nombre"></p:message>
<h:outputLabel value="Apellido Paterno:" for="apellidoPaterno" style="color:white" />
<p:inputText id="apellidoPaterno" value="#{jugadorView.apellidoPaterno}"
size="50" required="true" requiredMessage="Apellido Paterno requerido" >
</p:inputText>
<p:message for="apellidoPaterno"></p:message>
<h:outputLabel value="Apellido Materno:" for="apellidoMaterno" style="color:white" />
<p:inputText id="apellidoMaterno" value="#{jugadorView.apellidoMaterno}"
size="50" >
</p:inputText>
<p:separator></p:separator>
<f:facet name="footer">
<p:commandButton value="Agregar Jugador" action="#{jugadorView.guardarJugador}" update="form" ></p:commandButton>
</f:facet>
</h:panelGrid>
</p:panel>
</h:form>
</ui:define>
</ui:composition>
</div>
</h:body>
</html>
Creamos la clase agregarTemporada.xhtml
<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:ui="http://java.sun.com/jsf/facelets"
xmlns:p="http://primefaces.org/ui">
<h:head>
</h:head>
<h:body>
<div style="margin:0 auto;width:70%">
<ui:composition template="plantillaAdmin.xhtml" >
<ui:define name="contentAdmin" >
<h:form id="form">
<p:growl id="messagesLogin"/>
<p:panel header="Agregar Temporada de bateo" footer="Tutosoftware 2021">
<h:panelGrid columns="3" cellpadding="5">
<h:outputLabel value="Nombre de la temporada:" for="nombreTemporada" style="color:white" />
<p:inputText id="nombreTemporada" value="#{temporadaView.nombreTemporada}"
size="100" required="true" requiredMessage="Nombre de la temporada requerido" >
</p:inputText>
<p:message for="nombreTemporada"></p:message>
<f:facet name="footer">
<p:commandButton value="Crear Temporada" action="#{temporadaView.crearTemporada}" update="form" ></p:commandButton>
</f:facet>
</h:panelGrid>
</p:panel>
</h:form>
</ui:define>
</ui:composition>
</div>
</h:body>
</html>
Creamos la vista agregarPorcentaje.xhtml
<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: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>
<div style="margin:0 auto;width:70%">
<ui:composition template="plantillaAdmin.xhtml" >
<ui:define name="contentAdmin" >
<h:form id="form">
<p:growl id="messagesLogin"/>
<p:panel header="Agregar Porcentaje" footer="Tutosoftware 2022">
<p:outputLabel for="@next" value="Seleccionar Temporada" style="color:white" />
<p:selectOneMenu id="idTemporada" value="#{porcentajeView.idTemporada}"
required="true" requiredMessage="Selecionar temporada" >
<f:selectItem itemLabel="Seleccionar Temporada" itemValue=""/>
<f:selectItems value="#{porcentajeView.listaTemporada}" var="temporada"
itemLabel="#{temporada.nombreTemporada}" itemValue="#{temporada.idTemporada}" />
</p:selectOneMenu>
<p:message for="idTemporada"></p:message>
<br />
<p:commandButton value="Mostrar Jugadores" action="#{porcentajeView.mostrarJugadoresPorTemporada}" update="form,jugadores" ></p:commandButton>
<br />
<p:dataTable lazy="true" dynamic="true"
id="jugadores" var="j" value="#{porcentajeView.listaJugador}" editable="true" style="margin-bottom:20px">
<f:facet name="header">
Jugadores
</f:facet>
<p:column headerText="ID Juagador">
<h:outputText value="#{j.idJugador}" />
</p:column>
<p:column headerText="Fotografia">
<p:graphicImage value="#{j.imagen}" stream="false"/>
</p:column>
<p:column headerText="Nombre jugador">
<h:outputText value="#{j.nombre} #{j.apellidoPaterno} #{j.apellidoMaterno}" />
</p:column>
<p:column headerText="Número de Veces al Bat">
<h:outputText value="#{j.numVecesBat}" />
</p:column>
<p:column headerText="Número de Hits">
<h:outputText value="#{j.numHit}" />
</p:column>
<p:column headerText="Ultima Fecha Jugada">
<h:outputText value="#{j.fechaUltimoJuego}" />
</p:column>
<p:column headerText="Porcentaje">
<h:outputText value="#{j.porcentaje}" />
</p:column>
<p:column exportable="false">
<p:commandButton icon="pi pi-pencil" update=":form:manage-gamer-content"
oncomplete="PF('manageGamerDialog').show()"
styleClass="edit-button rounded-button ui-button-success" process="@this">
<f:setPropertyActionListener value="#{j}" target="#{porcentajeView.jugador}"/>
<p:resetInput target=":form:manage-gamer-content"/>
</p:commandButton>
</p:column>
</p:dataTable>
<p:dialog header="Detalle del Jugador" showEffect="fade" modal="true"
widgetVar="manageGamerDialog" responsive="true">
<p:outputPanel id="manage-gamer-content" class="ui-fluid">
<p:outputPanel rendered="#{not empty porcentajeView.jugador}">
<div class="p-field">
<p:outputLabel for="idJugador">ID Jugador</p:outputLabel>
<p:inputText id="idJugador" value="#{porcentajeView.jugador.idJugador}" disabled="true" />
</div>
<div class="p-field">
<p:outputLabel for="idTem">ID Temporada</p:outputLabel>
<p:inputText id="idTem" value="#{porcentajeView.jugador.idTemporada}" disabled="true" />
</div>
<div class="p-field">
<p:outputLabel for="nombre">Nombre</p:outputLabel>
<p:inputText id="nombre" value="#{porcentajeView.jugador.nombre}" disabled="true" />
</div>
<div class="p-field">
<p:outputLabel for="numVecesBat">Número de Veces al Bat</p:outputLabel>
<p:inputText id="numVecesBat" value="#{porcentajeView.jugador.numVecesBat}" disabled="true" />
</div>
<div class="p-field">
<p:outputLabel for="numHit">Número de Veces al Bat</p:outputLabel>
<p:inputText id="numHit" value="#{porcentajeView.jugador.numHit}" disabled="true" />
</div>
<div class="p-field">
<p:outputLabel for="bats">Introducir Número de Veces al Bat</p:outputLabel>
<p:inputText id="bats" value="#{porcentajeView.bats}" required="true" requiredMessage="Número de vecas al bat requerido" />
<p:message for="bats"></p:message>
</div>
<div class="p-field">
<p:outputLabel for="hits">Introducir Número de Hits</p:outputLabel>
<p:inputText id="hits" value="#{porcentajeView.hits}" required="true" requiredMessage="Número de hits requerido" />
<p:message for="hits"></p:message>
</div>
</p:outputPanel>
</p:outputPanel>
<f:facet name="footer">
<p:commandButton value="Actualizar Porcentaje" icon="pi pi-check" actionListener="#{porcentajeView.actualizarPorcentaje}"
update="manage-gamer-content" process="manage-gamer-content @this" />
</f:facet>
</p:dialog>
</p:panel>
</h:form>
</ui:define>
</ui:composition>
</div>
</h:body>
</html>