Oi gente, tudo bem,
tenho uma aplicação com JSF2, facelets e richfaces 4, porém tenho cerca de 40 paginas(cada uma referencia uma tabela no banco de dados) e cada uma delas tem um formulario que pode ser preenchido pelo usúario e uma lista que exibe os dados ja cadastrados em cada formulario, porém com isso estou tendo que escrever muito codigo html.
Usei o facelets para poder reaproveitar o topo, rodape e menu lateral, porém cada formulário eu uso uma tabela pra exibi-lo.
Gostaria de saber se é possivel usar alguma coisa(talvez o próprio facelets para reaproveitar as paginas) ou gerar algum componente especializado para exibir meu formularios e lista de resultado(que é feita com rich:datatable) que pudesse gerar uma economia de código
1 pagina de exemplo
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
template="/template/principalSec.xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:rich="http://richfaces.org/rich"
xmlns:a4j="http://richfaces.org/a4j"
xmlns:c="http://java.sun.com/jsp/jstl/core"
>
<ui:define name="migalha">
Home > Secretaria > Histórico > Comunidade e Obra
</ui:define>
<ui:define name="body">
<div align="center">
<table>
<tr>
<td><rich:message for="gravar" /></td>
<td><rich:message for="excluir" /></td>
</tr>
</table>
<br/>
<rich:panel header="Historico - Comunidade e Obra">
<h:form id="FormHistComunidadeObra">
<h:inputHidden id="hcoId" value="#{gravaHistComunidadeObra.hco_id}"/>
<table class="alinhaDireita">
<tr>
<td>ID:</td>
<td><h:inputText id="hcoIdLeitura" disabled="true" value="#{gravaHistComunidadeObra.hco_id}"/><br/></td>
</tr>
<tr>
<td>Comunidade:*</td>
<td><h:selectOneMenu required="true" id="comId" value="#{gravaHistComunidadeObra.com_id}">
<f:selectItems value="#{gravaComunidade.comunidades}" var="u" itemLabel="#{u.com_nom_residencia}" itemValue="#{u.com_id}" />
</h:selectOneMenu></td>
</tr>
<tr>
<td colspan="2"><h:message styleClass="mensagemErro" for="comId" /></td>
</tr>
<tr>
<td>Obra:*</td>
<td><h:selectOneMenu required="true" id="obrId" value="#{gravaHistComunidadeObra.obr_id}">
<f:selectItems value="#{gravaObra.obras}" var="u" itemLabel="#{u.obr_nom}" itemValue="#{u.obr_id}" />
</h:selectOneMenu></td>
</tr>
<tr>
<td colspan="2"><h:message styleClass="mensagemErro" for="obrId" /></td>
</tr>
<tr>
<td>Data de Inicio:*</td>
<td><h:inputText required="true" styleClass="data" id="hcoDataInicial" value="#{gravaHistComunidadeObra.hco_data_inicial}" >
<f:convertDateTime type="date" pattern="dd/MM/yyyy" locale="pt_BR" timeZone="GMT-3"/>
</h:inputText></td>
</tr>
<tr>
<td colspan="2"><h:message styleClass="mensagemErro" for="hcoDataInicial" /></td>
</tr>
<tr>
<td>Data de Fechamento:</td>
<td><h:inputText id="hcoDataFinal" styleClass="data" value="#{gravaHistComunidadeObra.hco_data_final}" >
<f:convertDateTime type="date" pattern="dd/MM/yyyy" locale="pt_BR" timeZone="GMT-3"/>
</h:inputText></td>
</tr>
<tr>
<td colspan="2"><h:message styleClass="mensagemErro" for="hcoDataFinal" /></td>
</tr>
</table>
<br/>
<h:commandButton immediate="true" onclick="limpador()" value="Limpar"/>
<h:commandButton id="gravar" value="Gravar" action="#{gravaHistComunidadeObra.gravar}" />
<h:commandButton id="excluir" value="Excluir" action="#{gravaHistComunidadeObra.excluir}" />
</h:form>
</rich:panel>
<br/>
<rich:panel header="Pesquisa" >
<h:form >
<h:inputText value="#{pesquisaTudo.digitar}" />
<h:commandButton value="Pesquisar" action="#{pesquisaTudo.pesquisaRelacionar}">
<f:param name="classe" value="br.salesianos.modelo.Hist_Comunidade_Obra" />
<f:param name="campo" value="co.com_nom_residencia" />
<f:param name="segundaEntidade" value="comunidade" />
<f:param name="apelidoAlias" value="co" />
</h:commandButton>
<br/><br/>
</h:form>
<div class="scroller">
<rich:dataTable id="items" styleClass="pesquisar"
value="#{pesquisaTudo.suaListaPesquisa}"
var="x">
<h:column >
<h:form>
<h:commandButton value="Editar" action="#{gravaHistComunidadeObra.editar}">
<f:param name="id" value="#{x.hco_id}" />
</h:commandButton>
</h:form>
</h:column>
<h:column >
<f:facet name="header">
<h:outputText value="ID " />
</f:facet>
<h:outputText value="#{x.hco_id}"/>
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="Comunidade"/>
</f:facet>
<h:outputText value="#{x.comunidade.com_nom_residencia}"/>
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="Obra"/>
</f:facet>
<h:outputText value="#{x.obra.obr_nom}"/>
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="Data Inicial"/>
</f:facet>
<h:outputText value="#{x.hco_data_inicial}"><f:convertDateTime type="date" pattern="dd/MM/yyyy" /></h:outputText>
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="Data Final"/>
</f:facet>
<h:outputText value="#{x.hco_data_final}"><f:convertDateTime type="date" pattern="dd/MM/yyyy" /></h:outputText>
</h:column>
</rich:dataTable>
</div>
</rich:panel>
<br/>
</div>
</ui:define>
</ui:composition>
Nesse exemplo tenho 149 linhas de codigo, eu acho muito, e ainda existem outros formularios que possuem mais
Vlw