• Nenhum resultado encontrado

O sistema foi implementado utilizando o Integrated Development Environment (IDE) IntelliJ IDEA e o Maven. O Maven é ferramenta de gerenciamento, construção e implementação de projetos criada pela Fundação Apache. Sua configuração básica de é um arquivo XML, chamado Project Object Model (POM) que deve ficar na raiz do projeto. Nele

são declaradas a estrutura, as dependências e as características do projeto. A Listagem 1 mostra o código do arquivo pom.xml.

<?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"> <modelVersion>4.0.0</modelVersion>

<groupId>br.edu.utfpr.pb.schaitler</groupId> <artifactId>tcc</artifactId>

<version>1.0</version> <parent>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-parent</artifactId> <version>1.2.4.RELEASE</version>

</parent> <properties>

<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <start-class>br.edu.utfpr.pb.schaitler.Application</start-class> <java.version>1.8</java.version> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> </properties> <dependencies> <dependency>

<groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency>

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-security</artifactId> </dependency>

<dependency>

<groupId>com.h2database</groupId> <artifactId>h2</artifactId> <scope>runtime</scope> </dependency>

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-tomcat</artifactId> <scope>provided</scope>

</dependency> <dependency>

<groupId>org.apache.tomcat.embed</groupId> <artifactId>tomcat-embed-jasper</artifactId> <scope>provided</scope>

</dependency> <dependency>

<groupId>javax.servlet</groupId> <artifactId>jstl</artifactId> </dependency>

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-data-jpa</artifactId> </dependency>

<dependency>

<groupId>mysql</groupId>

<artifactId>mysql-connector-java</artifactId> <version>8.0.11</version>

</dependency> <dependency>

<groupId>com.sun.faces</groupId> <artifactId>jsf-api</artifactId> <version>2.2.10</version>

</dependency> <dependency>

<groupId>com.sun.faces</groupId> <artifactId>jsf-impl</artifactId> <version>2.2.10</version>

</dependency> <dependency>

<groupId>org.primefaces.extensions</groupId> <artifactId>primefaces-extensions</artifactId> <version>3.2.0</version>

</dependency> <dependency>

<groupId>org.primefaces</groupId> <artifactId>primefaces</artifactId> <version>5.2</version>

</dependency> <dependency>

<groupId>org.primefaces.themes</groupId> <artifactId>bootstrap</artifactId>

<version>1.0.10</version> </dependency>

<dependency>

<groupId>org.webjars</groupId>

<artifactId>font-awesome</artifactId> <version>4.4.0</version>

</dependency> <dependency>

<groupId>org.springframework.security</groupId> <artifactId>spring-security-taglibs</artifactId> </dependency>

<dependency>

<groupId>org.springframework.webflow</groupId> <artifactId>spring-faces</artifactId>

<version>2.4.0.RELEASE</version> </dependency>

<dependency>

<groupId>commons-fileupload</groupId>

<artifactId>commons-fileupload</artifactId> <version>1.3.1</version>

</dependency> <dependency>

<groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>2.4</version>

</dependency> <dependency>

<groupId>net.sf.jasperreports</groupId> <artifactId>jasperreports</artifactId> <version>6.3.0</version>

</dependency> <dependency>

<artifactId>jasperreports-fonts</artifactId> <version>6.0.0</version>

</dependency> <dependency>

<groupId>com.sun.xml.ws</groupId> <artifactId>jaxws-rt</artifactId> <version>2.1.4</version> </dependency> </dependencies> <repositories> <repository> <id>prime-repo</id>

<name>PrimeFaces Maven Repository</name> <url>http://repository.primefaces.org</url>

<layout>default</layout> </repository>

</repositories> </project> Listagem 1 - pom.xml

As dependências contidas no arquivo POM, são todas as bibliotecas externas que o projeto depende para ser construído. Essas dependências são gerenciadas pelo próprio Maven. Na tela de login é possível verificar que existe um link para o cadastro de usuário. Esse cadastro é para usuários alunos, é possível verificar na Listagem 2 o componente “dialog” do Primeface, utilizado para apresentar a tela para informar os dados do usuário em um formato “modal”. O appendTo é utilizado para que o “dialog” seja listado dentro do “body” não sendo sobreposto na página.

<?xml version="1.0"encoding="UTF-8"?>

<ui:composition xmlns:ui="http://java.sun.com/jsf/facelets"

xmlns:h="http://java.sun.com/jsf/html" xmlns:p="http://primefaces.org/ui" xmlns:pe="http://primefaces.org/ui/extensions" xmlns:f="http://java.sun.com/jsf/core" xmlns:j="http://xmlns.jcp.org/jsf/composite/components" template="/resources/templates/base.xhtml">

<p:dialog id="dlgCadastrar"widgetVar="dlgCadastrar"

header="#{msg['usuario.cadastrar']}"modal="true"

resizable="false"closable="false"appendTo="@(body)"> <h:form id="form">

<h:panelGrid id="pnlForm"columns="2"cellspacing="5"> <p:outputLabel value="#{msg['comum.nome']}"for="nome"/>

<p:inputText id="nome"value="#{alunoController.instancia.usuario.nome}"

maxlength="60"size="70"required="true"

requiredMessage="#{msg['comum.nome.required']}"/>

<p:outputLabel value="#{msg['aluno.ra']}"for="ra"/>

<pe:inputNumber id="ra"value="#{alunoController.instancia.ra}"

maxValue="99999999"decimalPlaces="0"

required="true"requiredMessage="#{msg['aluno.ra.required']}"

validatorMessage="#{msg['aluno.ra.validateLongRange']}"> <f:validateLongRange minimum="1"/>

</pe:inputNumber>

<p:selectOneMenu

id="filtroAtivo"value="#{usuarioController.filtroAtivo}">

<f:selectItem itemValue="0"itemLabel="#{msg['comum.ativos']}"/> </p:selectOneMenu>

<p:outputLabel value="#{msg['usuario.login']}"for="login"/>

<p:inputText id="login"value="#{alunoController.instancia.usuario.login}"

maxlength="30"size="40"required="true"

requiredMessage="#{msg['usuario.login.required']}"/>

<p:outputLabel value="#{msg['usuario.email']}"for="email"/>

<p:inputText id="email"value="#{alunoController.instancia.usuario.email}"

type="email"maxlength="60"size="70"/>

<p:outputLabel value="#{msg['usuario.telefone']}"for="telefone"/> <p:inputText

id="telefone"value="#{alunoController.instancia.usuario.telefone}"

maxlength="14"size="20"/>

<p:outputLabel value="#{msg['usuario.senha']}"for="senha"/>

<p:password id="senha"value="#{alunoController.instancia.usuario.senha}"

maxlength="30"size="40"required="true"

validatorMessage="#{msg['usuario.confirmacao.validator']}"

requiredMessage="#{msg['usuario.senha.required']}"

match="confirmacao"/>

<p:outputLabel value="#{msg['usuario.confirmacao']}"for="confirmacao"/> <p:password

id="confirmacao"value="#{alunoController.instancia.usuario.senha}"

maxlength="30"size="40"required="true"

requiredMessage="#{msg['usuario.confirmacao.required']}"/> </h:panelGrid>

<div align="right">

<p:commandButton value="#{msg['comum.salvar']}"icon="fa fa-check"

actionListener="#{alunoControler.salvarCadastrar}"

update=":#{p:component('tblDados')}"process="@form"> <p:resetInput target="@form"/>

</p:commandButton>

<p:commandButton value="#{msg['comum.cancelar']}"icon="fa fa-close"

actionListener="#{alunoControler.cancelarSalvar}"

update=":#{p:component('tblDados')}"process="@this"> <p:resetInput target="@form"/>

</p:commandButton> </div> </h:form> </p:dialog> </ui:composition> Listagem 2 - cadastrar.xhtml

Na Listagem 2 é possível verificar o componente “confirmDialog”, também do Primefaces, que irá renderizar mensagens de confirmação ao usuário. A opção de salvar usuário repassa os dados informados pelo usuário para que sejam armazenados no banco e retorna para a tela de login para que seja possível realizar o acesso ao sistema. Caso haja algum problema no cadastro, é retornada mensagem ao usuário. Outra opção para o usuário nessa tela é a de cancelar, que apenas retornará o usuário para a tela de login.

A Listagem 3 mostra o Controller completo, com os métodos para salvar o usuário no banco e a navageção entre as telas, conforme resultado das operações.

@Controller @Scope("view")

public class CadastrarController implements Serializable { private Usuario usuario = new Usuario();

private Aluno aluno = new Aluno();

private Permissao permissao = new Permissao(); private FacesService faces;

private List<Aluno>alunos = new ArrayList<>();

private List<Permissao>permissoes = new ArrayList<>();

@Autowired

private AlunoRepository alunoRepository;

@Autowired

private UsuarioRepository usuarioRepository;

@Autowired

private PermissaoRepository permissaoRepository;

@Autowired

protected CadastrarController(AlunoRepository alunoRepository

, FacesService faces, UsuarioRepository usuarioRepository){

this.alunoRepository = alunoRepository;

this.usuarioRepository = usuarioRepository;

this.faces = faces;

alunos = new ArrayList<>(); }

public boolean dadosValidos() { return true;

}

@Transactional

public void salvar() throws IOException {

FacesContext context = FacesContext.getCurrentInstance(); FacesMessage msg = new FacesMessage("Salvo com sucesso"); if (dadosValidos()) {

try {

prePersist();

usuarioRepository.save(usuario);

usuario.setAlunos(alunos);

aluno.setUsuario(usuario);

alunoRepository.save(aluno);

context.addMessage(null, msg ); } catch (Exception ex) {

ex.printStackTrace();

context.addMessage(null, new FacesMessage(ex.getMessage()) ); } finally { FacesContext.getCurrentInstance().getExternalContext().redirect("login"); } } } @PrePersist

if (usuario != null) {

usuario.setAtivo(true);

usuario.setPermissoes(permissoes);

usuario.criptografarSenha();

alunos.add(aluno);

permissoes.add(getPermissao());

} }

public void cancelar() {

aluno = null;

usuario = null; try {

FacesContext.getCurrentInstance().getExternalContext().redirect("login"); } catch (Exception e){

e.getStackTrace(); }

}

public Permissao getPermissao() {

return permissaoRepository.findByPermissao("ROLE_ALUNO"); }

public void setPermissao(Permissao permissao) { this.permissao = permissao;

}

public List<Permissao> getPermissoes() { return permissoes;

}

public void setPermissoes(List<Permissao> permissoes) { this.permissoes = permissoes;

}

public Usuario getUsuario() { return usuario;

}

public void setUsuario(Usuario usuario) { this.usuario = usuario;

}

public Aluno getAluno() { return aluno;

}

public void setAluno(Aluno aluno) { this.aluno = aluno;

}

public List<Aluno> getAlunos() { return alunos;

}

public void setAlunos(List<Aluno> alunos) { this.alunos = alunos;

} }

A classe de Controller “CadastrarController” possui a anotação “Scoped” definida como view. Dessa forma, a classe será criada enquanto a página que faz referência ficar aberta no navegador. É por meio do Controller que a camada de visão se comunica com a camada de modelo.

[...]

<p:tab id="tabEstagio"title="Estágio"

disabled="#{projetoController.instancia.tipoProjeto.estagio == true}"> <p:scrollPanel mode="native"style="height: 300px; border: 0;">

<h:panelGrid columns="4"cellspacing="5"> <p:outputLabel

value="#{msg['projeto.estagio.tipoEstagio']}"for="tipoestagio"/> <p:selectOneMenu id="tipoestagio"

value="#{projetoController.planoEstagio.tipoEstagio}"

required="true"

requiredMessage="#{msg['projeto.estagio.tipoEstagio.required']}"

style="width: 250px;">

<p:ajax listener="#{projetoController.onTipoEstagioChange}"process="@this"

update="subTipoEstagio tipoValidacao"/>

<f:selectItem itemLabel="Informar o Tipo de Estágio"itemValue=""

noSelectionOption="true"/>

<f:selectItems value="#{projetoController.tipoEstagio}"/> </p:selectOneMenu>

<p:outputLabel value="#{msg['projeto.estagio.periodo']}"for="periodo"/> <p:inputText id="periodo"value="#{projetoController.planoEstagio.periodo}"

required="true"size="90"

requiredMessage="#{msg['projeto.estagio.periodo.required']}"

maxlength="100"style="width: 30px;"/>

<p:outputLabel value="#{msg['projeto.estagio.subTipoEstagio']}"

for="subTipoEstagio"/>

<p:selectOneMenu id="subTipoEstagio"

value="#{projetoController.planoEstagio.subTipoEstagio}"

style="width: 250px;">

<p:ajax listener="#{projetoController.onSubTipoEstagioChange}"process="@this"

update="tipoValidacao"/>

<f:selectItem itemLabel="Informar o Sub Tipo de Estágio"itemValue=""

noSelectionOption="true"/>

<f:selectItems value="#{projetoController.subTipoEstagio}"/> </p:selectOneMenu>

<p:outputLabel

value="#{msg['projeto.estagio.tipoValidacao']}"for="tipoValidacao"/> <p:selectOneMenu id="tipoValidacao"

value="#{projetoController.planoEstagio.tipoValidacao}"

style="width: 250px;">

<f:selectItem itemLabel="Informar o Tipo de Validação"itemValue=""

noSelectionOption="true"/>

<f:selectItems value="#{projetoController.tipoValidacao}"/> </p:selectOneMenu>

</h:panelGrid>

<h:panelGrid columns="2"cellspacing="5">

<p:outputLabel value="#{msg['projeto.estagio.empresa']}"for="empresa"/> <p:inputText id="empresa"value="#{projetoController.planoEstagio.empresa}"

requiredMessage="#{msg['projeto.estagio.empresa.required']}"

maxlength="100"size="90"/>

<p:outputLabel value="#{msg['projeto.estagio.enderecoEmpresa']}"

for="enderecoEmpresa"/> <p:inputText id="enderecoEmpresa" value="#{projetoController.planoEstagio.enderecoEmpresa}" required="true" requiredMessage="#{msg['projeto.estagio.enderecoEmpresa.required']}" maxlength="100"size="90"/>

<p:outputLabel value="#{msg['projeto.estagio.supervisor']}"for="supervisor"/> <p:inputText

id="supervisor"value="#{projetoController.planoEstagio.supervisor}"

required="true"

requiredMessage="#{msg['projeto.estagio.supervisor.required']}"

maxlength="100"size="90"/> </h:panelGrid>

<h:panelGrid columns="6"cellspacing="5">

<p:outputLabel value="#{msg['projeto.estagio.cargoSupervisor']}"

for="cargoSupervisor"/>

<p:selectOneMenu id="cargoSupervisor"

value="#{projetoController.planoEstagio.cargoSupervisor}"

required="true"

requiredMessage="#{msg['projeto.estagio.cargoSupervisor.required']}"

converter="#{cargoConverter}"style="width: 250px;">

<f:selectItem itemLabel="#{msg['projeto.estagio.cargoSupervisor.required']}"

noSelectionOption="true"/>

<f:selectItems value="#{projetoController.cargo}"var="cargo"

itemLabel="#{cargo.nome}"itemValue="#{cargo}"/> </p:selectOneMenu>

<p:link outcome="cargo"value="Cadastrar Cargo"target="_blank"/>

<p:outputLabel value="#{msg['projeto.estagio.telefoneSupervisor']}"

for="telefoneSupervisor"/> <p:inputText id="telefoneSupervisor" value="#{projetoController.planoEstagio.telefoneSupervisor}" required="true" requiredMessage="#{msg['projeto.estagio.telefoneSupervisor.required']}" maxlength="100"size="20"/> </h:panelGrid>

<h:panelGrid columns="6"cellspacing="5">

<p:outputLabel value="#{msg['projeto.estagio.email']}"for="emailSupervisor"/> <p:inputText id="emailSupervisor" value="#{projetoController.planoEstagio.emailSupervisor}" required="true" requiredMessage="#{msg['projeto.estagio.email.required']}" maxlength="100" size="20"/> <p:outputLabel

value="#{msg['projeto.estagio.totalSemanal']}"for="totalSemanal"/> <p:inputText id="totalSemanal"

value="#{projetoController.planoEstagio.horasSemanais}"

required="true"

requiredMessage="#{msg['projeto.estagio.totalSemanal.required']}"

style="width: 50px;"/>

<p:outputLabel value="#{msg['projeto.estagio.totalHorasEstagio']}"

for="totalHorasEstagio"/>

<p:inputText id="totalHorasEstagio"

value="#{projetoController.planoEstagio.horasTotais}"required="true"

requiredMessage="#{msg['projeto.estagio.totalHorasEstagio.required']}"

size="20"style="width: 50px;"/> </h:panelGrid>

<h:panelGrid columns="4"cellspacing="5">

<p:outputLabel value="#{msg['projeto.estagio.dataInicial']}"for="dataInicio"/> <p:calendar id="dataInicio"effect="explode"

value="#{projetoController.planoEstagio.dataInicio}" pattern="dd/MM/yyyy" required="true" locale="pt"placeholder="99/99/9999" converterMessage="#{msg['projeto.estagio.dataInicial.converter']}" requiredMessage="#{msg['projeto.estagio.dataInicial.required']}"/>

<p:outputLabel value="#{msg['projeto.estagio.dataFinal']}"for="dataFinal"/> <p:calendar id="dataFinal"effect="explode"

value="#{projetoController.planoEstagio.dataFinal}"pattern="dd/MM/yyyy"

required="true"

locale="pt"placeholder="99/99/9999"

converterMessage="#{msg['projeto.estagio.dataFinal.converter']}"

requiredMessage="#{msg['projeto.estagio.dataFinal.required']}"/>

<p:outputLabel value="#{msg['projeto.estagio.termo']}"for="termo"/> <p:inputText

id="termo"value="#{projetoController.planoEstagio.termoCompromisso}"

required="true"

requiredMessage="#{msg['projeto.estagio.termo.required']}"

maxlength="100"

size="20"/>

<p:outputLabel

value="#{msg['projeto.estagio.emissorTermo']}"for="emissorTermo"/> <p:selectOneMenu

id="emissorTermo"value="#{projetoController.planoEstagio.emissor}"

style="width: 100px"editable="true">

<f:selectItem itemLabel="UTFPR"itemValue="UTFPR"/> <f:selectItem itemLabel="Outros"itemValue="Outros"/> </p:selectOneMenu>

</h:panelGrid>

<h:panelGrid columns="1"cellspacing="5">

<p:outputLabel value="#{msg['projeto.estagio.atvDesempenhadas']}"

for="atvDesempenhadas"/>

<p:inputTextarea id="atvDesempenhadas"

value="#{projetoController.planoEstagio.atvDesempenhadas}"

required="true"rows="5"cols="120"

requiredMessage="#{msg['projeto.estagio.atvDesempenhadas.required']}"/> </h:panelGrid>

<p:dataTable id="tblHorarios"

value="#{projetoController.planoEstagio.planoEstagioHorarios}"

var="horario"

emptyMessage="Adicione um horário"rowIndexVar="indice"

style="width: 500px;"> <f:facet

name="header">#{msg['planoEstagioHorario.listagem.descricao']}</f:facet> <p:column headerText="#{msg['planoEstagioHorario.diaSemana']}">

<p:selectOneMenu id="diaSemana"value="#{horario.diaSemana}"style="width:50px"

required="true"

requiredMessage="#{msg['planoEstagioHorario.diaSemana.required']}"> <f:selectItem itemLabel="2ª"itemValue="2ª"/>

<f:selectItem itemLabel="3ª"itemValue="3ª"/> <f:selectItem itemLabel="4ª"itemValue="4ª"/> <f:selectItem itemLabel="5ª"itemValue="5ª"/> <f:selectItem itemLabel="6ª"itemValue="6ª"/> <f:selectItem itemLabel="Sab"itemValue="Sab"/> </p:selectOneMenu>

</p:column>

<p:column headerText="#{msg['planoEstagioHorario.primeiroTurnoInicio']}"

width="60px">

<p:calendar id="primeiroTurnoInicio"value="#{horario.primeiroTurnoInicio}"

pattern="HH:mm"timeOnly="true"locale="pt"

converterMessage="#{msg['planoEstagioHorario.primeiroTurnoInicio.converter']}"

required="true"

requiredMessage="#{msg['planoEstagioHorario.primeiroTurnoInicio']}"

styleClass="dataTimeDim"/> </p:column>

<p:column headerText="#{msg['planoEstagioHorario.primeiroTurnoFim']}"> <p:calendar id="primeiroTurnoFim"value="#{horario.primeiroTurnoFim}"

pattern="HH:mm"timeOnly="true"locale="pt"

converterMessage="#{msg['planoEstagioHorario.primeiroTurnoFim.converter']}"

required="true"

requiredMessage="#{msg['planoEstagioHorario.primeiroTurnoFim.required']}"

styleClass="dataTimeDim"/> </p:column>

<p:column headerText="#{msg['planoEstagioHorario.segundoTurnoInicio']}"> <p:calendar id="segundoTurnoInicio"value="#{horario.segundoTurnoInicio}"

pattern="HH:mm"timeOnly="true"locale="pt"

converterMessage="#{msg['planoEstagioHorario.segundoTurnoInicio.converter']}"

required="true"

requiredMessage="#{msg['planohEstagioHorario.segundoTurnoInicio.required']}"

styleClass="dataTimeDim"/> </p:column>

<p:column headerText="#{msg['planoEstagioHorario.segundoTurnoFim']}"> <p:calendar id="segundoTurnoFim"value="#{horario.segundoTurnoFim}"

pattern="HH:mm"

timeOnly="true"locale="pt"

converterMessage="#{msg['planoEstagioHorario.segundoTurnoFim.converter']}" required="true" requiredMessage="#{msg['planoEstagioHorario.segundoTurnoFim.required']}" styleClass="dataTimeDim"/> </p:column> <p:column width="15">

<p:commandButton actionListener="#{projetoController.remHorario(indice)}"

process="tblHorarios"update="@this"immediate="true"

rendered="#{indice >0}"

title="#{msg['remover']}"icon="fa fa-trash"

oncomplete="PF('dlgForm').initPosition();"/> </p:column>

<f:facet name="footer">

<p:commandButton value="#{msg['planoEstagioHorario.inserir']}"

icon="ui-icon-plus"

action="#{projetoController.addHorario}"process="tblHorarios"

update="tblHorarios"

oncomplete="PF('dlgForm').initPosition();"/> </f:facet>

</p:scrollPanel> </p:tab>

[...]

Listagem 4 - projeto.xhtml

Na Listagem 4 é apresentada a modificação realizada no arquivo projeto.xhtml. Todos os componentes desta tela foram movidos para dentro de um “tabview”, componente do Primefaces que apresenta a informação em guias. A guia que corresponde à informação de estágio ficará desabilitada caso o usuário informe o tipo de projeto que não seja estágio, no momento do cadastro.

Na guia referente aos dados do estágio, foi adicionado um “datatable”, componente do Primefaces que lista informações em formato de tabela. Esse componente foi utilizado para listar os horários em que o usuário efetuou o estágio. O “commandButton” é utilizado para adicionar uma nova linha na tabela para o cadastro da informação de horários. O componente “scrollPanel” apresenta barras de rolagem na guia de estágio para que o usuário tenha mais facilidade ao acessar o cadastro, podendo rolar a página para que consiga visualizar todos os componentes, sem precisar ajustar a visualização do modal.

Para listar as informações de tipo de validação e subtipo de estágio é necessário que seja informado o tipo de estágio, o campo subtipo de estágio ficará habilitado apenas se o tipo de estágio for obrigatório. Já o campo tipo de validação ficará habilitado se o tipo do estágio for validação ou se o tipo do estágio for obrigatório e o subtipo for efetivo.

[...]

<p:panelGrid id="pnlDadosProjeto"> <p:row>

<p:column styleClass="ui-widget-header">

<h:outputText value="#{msg['projeto.titulo']}"/> </p:column>

<p:column>

<h:outputText value="#{projetoController.instancia.titulo}"/> </p:column>

</p:row> <p:row>

<p:column styleClass="ui-widget-header">

<h:outputText value="#{msg['projeto.orientador']}"/> </p:column> <p:column> <h:outputText value="#{projetoController.instancia.orientador.usuario.nome}"/> </p:column> </p:row> <p:row>

<p:column styleClass="ui-widget-header">

<h:outputText value="#{msg['projeto.curso']}"/> </p:column>

<h:outputText value="#{projetoController.instancia.curso.nome}"/> </p:column>

</p:row> <p:row>

<p:column styleClass="ui-widget-header">

<h:outputText value="#{msg['projeto.tipoProjeto']}"/> </p:column>

<p:column>

<h:outputText value="#{projetoController.instancia.tipoProjeto.nome}"/> </p:column>

</p:row>

<p:row disabled="#{projetoController.instancia.tipoProjeto.estagio == false}">

<p:column styleClass="ui-widget-header">

<h:outputText value="#{msg['projeto.downloadPlano']}"/> </p:column>

<p:column> <h:form> <p:link>

<p:commandButton icon="fa fa-file"value="Download"ajax="false"

onclick="PrimeFaces.monitorDownload(start, stop);">

<f:setPropertyActionListener target="#{projetoController.tipoRelatorio}"

value="1"/>

<p:fileDownload value="#{projetoController.arquivoRetorno}"/> </p:commandButton> </p:link> </h:form> </p:column> </p:row> <p:row>

<p:column styleClass="ui-widget-header"> <h:outputText value="#{msg['projeto.ata']}"/> </p:column>

<p:column> <h:form> <p:link>

<p:commandButton icon="fa fa-file"value="Download Ata"ajax="false"

onclick="PrimeFaces.monitorDownload(start, stop);">

<f:setPropertyActionListener target="#{projetoController.tipoRelatorio}"

Documentos relacionados