Amigos boa noite,
Estou precisando desenvolver um formulario simples com Seam que tem vários campos para preenchimento, deve funcionar assim:
- Usuário chama a aplicação, a mesma redireciona para index.xhtml que já é o formulário.
- Usuário Preenche os valores dos campos e clica no botão para incluir, se houver algum erro um modal apresenta o erro via ajax, sem renderizar a página.
- Se os dados forem validados com sucesso, o sistema salva os dados na base e apresenta um modal com a mensagem de sucesso.
- O sistema limpa o formulário para um novo preenchimento de dados.
Vou incluir aqui os arquivos quem puder me ajudar eu agradeço.
Estou estudando o caso, para saber qual tipo de escopo Seam utilizar e como gerenciar os componentes ajax.
Web.xml:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
<!-- Plugging the "Blue Sky" skin into the project -->
<context-param>
<param-name>org.richfaces.SKIN</param-name>
<param-value>blueSky</param-value>
</context-param>
<!-- Making the RichFaces skin spread to standard HTML controls -->
<context-param>
<param-name>org.richfaces.CONTROL_SKINNING</param-name>
<param-value>enable</param-value>
</context-param>
<!-- Defining and mapping the RichFaces filter -->
<filter>
<display-name>RichFaces Filter</display-name>
<filter-name>richfaces</filter-name>
<filter-class>org.ajax4jsf.Filter</filter-class>
</filter>
<filter-mapping>
<filter-name>richfaces</filter-name>
<servlet-name>Faces Servlet</servlet-name>
<dispatcher>REQUEST</dispatcher>
<dispatcher>FORWARD</dispatcher>
<dispatcher>INCLUDE</dispatcher>
</filter-mapping>
<listener>
<listener-class>org.jboss.seam.servlet.SeamListener</listener-class>
</listener>
<filter>
<filter-name>Seam Filter</filter-name>
<filter-class>org.jboss.seam.web.SeamFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>Seam Filter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<context-param>
<param-name>facelets.DEVELOPMENT</param-name>
<param-value>true</param-value>
</context-param>
<context-param>
<param-name>javax.faces.STATE_SAVING_METHOD</param-name>
<param-value>client</param-value>
</context-param>
<context-param>
<param-name>javax.faces.DEFAULT_SUFFIX</param-name>
<param-value>.xhtml</param-value>
</context-param>
<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>*.seam</url-pattern>
</servlet-mapping>
</web-app>
Action/Bean para gerenciar o formulario:
package br.avaliacao.mirante.action;
import org.jboss.seam.ScopeType;
import org.jboss.seam.annotations.In;
import org.jboss.seam.annotations.Name;
import org.jboss.seam.annotations.Out;
import org.jboss.seam.annotations.Scope;
import br.avaliacao.mirante.entidade.SolicitacaoTransporte;
import br.avaliacao.mirante.servico.SolicitacaoTransporteService;
import br.avaliacao.mirante.util.DataUtil;
import com.miranteinfo.seam.framework.action.BaseAction;
@Name("solicitacaoTransporteAction")
@Scope(ScopeType.CONVERSATION)
public class SolicitacaoTransporteAction extends BaseAction {
private static final long serialVersionUID = -2104805853460643964L;
@In(create = true, required=false)
@Out(required=false)
SolicitacaoTransporte solicitacaoTransporte;
@In(create = true)
SolicitacaoTransporteService solicitacaoTransporteService;
/**
* Método responsável por chamar a camada SERVICE para inserir os dados
*/
public void incluirNovaSolicitacao(){
if(validarCamposSolicitacaoTransporte()){
solicitacaoTransporteService.incluirSolicitacao(solicitacaoTransporte);
addMsg("Solicitação de Transporte de Passageiro incluída com sucesso");
solicitacaoTransporte = new SolicitacaoTransporte();
}
}
/**
* Método responsável por validar as informações vindas do formulário
*/
public boolean validarCamposSolicitacaoTransporte(){
boolean validadorFormulario = Boolean.TRUE;
try {
int validaValorRamal = -1;
validaValorRamal = solicitacaoTransporte.getDsRamal();
} catch (Exception e) {
addMsgErro("Campo Ramal de Preenchimento Obrigatório!");
validadorFormulario = Boolean.FALSE;
}
if(solicitacaoTransporte.getDataAgendamento() == null){
addMsgErro("Campo Data do Agendamento de Preenchimento Obrigatório!");
validadorFormulario = Boolean.FALSE;
}else if(!DataUtil.isDataValida(solicitacaoTransporte.getDataAgendamento(),DataUtil.FORMATO_DATA_BRASIL)){
addMsgErro("Campo Data do Agendamento preenchido com valor inválido!");
validadorFormulario = Boolean.FALSE;
}
if(solicitacaoTransporte.getHorarioSolicitado() == null){
addMsgErro("Campo Horário Solicitado de Preenchimento Obrigatório!");
validadorFormulario = Boolean.FALSE;
}
return validadorFormulario;
}
public SolicitacaoTransporte getSolicitacaoTransporte() {
return solicitacaoTransporte;
}
public void setSolicitacaoTransporte(SolicitacaoTransporte solicitacaoTransporte) {
this.solicitacaoTransporte = solicitacaoTransporte;
}
}
Formulario index.xhtml:
<?xml version="1.0" encoding="UTF-8"?>
<!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" xml:lang="en" lang="en">
<head>
<title></title>
</head>
<body>
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:a4j="http://richfaces.org/a4j"
xmlns:rich="http://richfaces.org/rich"
xmlns:mir="http://www.miranteinfo.com/seam/taglib">
<f:view>
<mir:messages/>
<mir:statusAjax/>
<a4j:form id="solicitacaoForm" rendered="true">
<rich:panel width="700" style="text-align:center;">
<f:facet name="header">
<h:outputText value="#{messages['index.topo.nome']}"/>
</f:facet>
<rich:columnGroup>
<rich:column>
<h:panelGrid columns="2">
<h:outputText value="Solicitante:" />
<h:panelGroup>
<h:inputText id="dsSolicitante"
value="#{solicitacaoTransporteAction.solicitacaoTransporte.dsSolicitante}"
maxlength="60" />
</h:panelGroup>
<h:outputText value="Localização da Área:" />
<h:panelGroup>
<h:inputText id="dsLocalizacaoArea"
value="#{solicitacaoTransporteAction.solicitacaoTransporte.dsLocalizacaoArea}"
maxlength="100" />
</h:panelGroup>
<h:outputText value="Ramal: *" />
<h:panelGroup>
<h:inputText id="dsRamal"
value="#{solicitacaoTransporteAction.solicitacaoTransporte.dsRamal}"
required="true"
requiredMessage="Campo Ramal de Preenchimento Obrigatório!"
validatorMessage="Campo Ramal preenchido com valor inválido - Inserir até quatro caracteres numéricos sem sinal!"
converterMessage="Campo Ramal preenchido com valor inválido!"
size="4"
maxlength="4">
<f:validateLength minimum="1" maximum="4"/>
<f:validateLongRange minimum="0" />
</h:inputText>
</h:panelGroup>
<h:outputText value="Data do Agendamento: *" />
<h:panelGroup>
<mir:inputDate id="dataAgendamento"
required="true"
label="Campo Data do Agendamento"
value="#{solicitacaoTransporteAction.solicitacaoTransporte.dataAgendamento}"
pattern="dd/MM/yyyy"/>
</h:panelGroup>
<h:outputText value="Gerência:" />
<h:panelGroup>
<h:inputText id="dsGerencia"
value="#{solicitacaoTransporteAction.solicitacaoTransporte.dsGerencia}"
maxlength="5" />
</h:panelGroup>
<h:outputText value="Horário Solicitado: *" />
<h:panelGroup>
<mir:inputDate id="horarioSolicitado"
required="true"
label="Campo Horário Solicitado"
value="#{solicitacaoTransporteAction.solicitacaoTransporte.horarioSolicitado}"
pattern="dd/MM/yyyy"/>
</h:panelGroup>
</h:panelGrid>
</rich:column>
<rich:column>
<a4j:commandButton value="Enviar"
action="#{solicitacaoTransporteAction.incluirNovaSolicitacao}"
status="statusAjax" />
</rich:column>
</rich:columnGroup>
</rich:panel>
</a4j:form>
</f:view>
</ui:composition>
</body>
</html>
Muito Obrigado.