[Logo] Neo Framework Forum
  [Search] Busca   [Recent Topics] Tópicos Recentes   [Members]  Lista de Usuários   [Groups] De volta para a página principal 
[Register] Registrar / 
[Login] Entrar 
Mensagens enviadas por: rogel.garcia  XML
Perfil de rogel.garcia -> Mensagens enviadas por rogel.garcia [274] Ir para a página: Anterior  1, 2, 3 ... 15, 16 , 17, 18, 19 Próximo 
Autor Mensagem
Você consegue rodar os exemplos com qualquer plugin...

Recapitulando as alterações feitas nos templates.

No EntradaTag.jsp foram adicionados os dois javascripts :

Code:
 <script type="text/javascript">
 function verificaLista(obj){
 	if (obj.length == 1){
 		document.getElementById("msg."+obj.name).style.display = "";
 		document.getElementById("msg."+obj.name).innerHTML = "Nenhum registro encontrado";
 	} else {
 		document.getElementById("msg."+obj.name).style.display = "none";
 	}
 }
 /*
  * Essa função limpa os subItens que por acaso possam estar com a mensagem Nenhum registro encontrado
  */
 function verificaSubItem(obj){
 	var partes = obj.name.split('.');
 	partes.length = partes.length - 2;
 	for(var i = 0; i < partes.length; i++){
 		var msg = 'msg';
 		for(var j = 0; j < partes.length - i; j++){
 		    msg += '.'+partes[j];
 		}
 		document.getElementById(msg).style.display = "none";
 	}
 }
 </script>
 



No PropertyTag.jsp foram adionados dois SPANs (ou 3 se desejar a mensagem quando for um dataGrid)

Code:
 <span id="msg.${Tproperty.name}"></span>
 


Linhas 28,61 e 75

Ainda no inicio do PropertyTag.jsp foi adicionado o seguinte bloco:

Code:
 <c:if test="${Tproperty.useAjax}">
 	<c:set target="${Tproperty}" property="onLoadItens" value="verificaLista(this);${Tproperty.onLoadItens}"/>
 	<c:set target="${Tproperty.dynamicAttributesMap}" property="onchange" value="verificaSubItem(this);${Tproperty.dynamicAttributesMap['onchange']}"/>
 </c:if>
 


Obs: É diferente configurar o onLoadItens do onchange porque o onLoadItens é uma propriedade da tag Property. O onchange não. Mas é possível adicionar um atributo onchange através de dynamic Attributes (presente em todas as tags). Esses dynamicAttributes são acessados através de um mapa chamado dynamicAttributesMap

Atenção: Por causa dessa modificação sempre utilize o atributo onchange com letras minúsculas na sua aplicação. Caso contrário terá que ser feita uma consistencia melhor para a propriedade onchange.
E finalmente, você pode adicionar

Code:
 <c:if test="${Tproperty.useAjax}">
     <c:set target="${Tproperty}" property="onLoadItens" value="verificaLista(this);${Tproperty.onLoadItens}"/>
     <c:set target="${Tproperty.dynamicAttributesMap}" property="onchange" value="verificaSubItem(this);${Tproperty.dynamicAttributesMap['onchange']}"/>
 </c:if>
 


Ao inicio do arquivo PropertyTag.jsp (logo após a declaração das taglibs)

E então o seu JSP de entrada fica original denovo:

Code:
 <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
 <%@ taglib prefix="n" uri="neo"%>
 <%@ taglib prefix="t" uri="template"%>
 <t:entrada>
 	<t:janelaEntrada>
 		<t:tabelaEntrada>
 			<t:property name="id"/>
 			<n:comboReloadGroup useAjax="true"> 
 				<t:property name="piezometro.estrutura.area.projeto" />			
 				<t:property name="piezometro.estrutura.area" />			
 				<t:property name="piezometro.estrutura" />			
 				<t:property name="piezometro" />			
 			</n:comboReloadGroup>
 			<t:property name="data" />
 		</t:tabelaEntrada>
 	</t:janelaEntrada>
 </t:entrada>
 


E você passa a ganhar essa funcionalidade para todas as páginas, sem ter que mecher em nenhuma outra página.

Como eu costumo brincar: E isso tudo sai pra você de graça
Se desejar que dataGrids que forem do modo input também exibam a mensagem adicione o SPAN também na linha 28 do PropertyTag.jsp
Se você adicionar a seguinte linha:

Code:
 <span id="msg.${Tproperty.name}"></span>
 


No arquivo PropertyTag.jsp, em baixo das tags n:input como no exemplo:

br/com/linkcom/neo/view/template/PropertyTag.jsp
Code:
   ......
 <c:if test="${Tproperty.mode == 'input'}">
 <n:input pattern="${Tproperty.pattern}" selectOnePathParameters="${Tproperty.selectOnePathParameters}" insertPath="${Tproperty.insertPath}"  holdValue="${Tproperty.holdValue}" showRemoverButton="${Tproperty.showRemoverButton}" optionalParams="${Tproperty.optionalParams}"  transientFile="${Tproperty.transientFile}" autoSugestUniqueItem="${Tproperty.autoSugestUniqueItem}" onLoadItens="${Tproperty.onLoadItens}" useAjax="${Tproperty.useAjax}" showLabel="${Tproperty.showLabel}" type="${Tproperty.type}" reloadOnChange="${Tproperty.reloadOnChange}" trueFalseNullLabels="${Tproperty.trueFalseNullLabels}" selectOnePath="${Tproperty.selectOnePath}" itens="${Tproperty.itens}"
 	label="${Tproperty.label}" selectLabelProperty="${Tproperty.selectLabelProperty}" includeBlank="${Tproperty.includeBlank}" blankLabel="${Tproperty.blankLabel}" cols="${Tproperty.cols}" rows="${Tproperty.rows}" write="${Tproperty.write}" dynamicAttributesMap="${Tproperty.dynamicAttributesMap}">
 	<n:doBody />
 </n:input>
 <span id="msg.${Tproperty.name}"></span>
 </c:if>
 .....
 


Você deve adicionar o SPAN logo abaixo de </n:input> (linhas 61 e 75)

E, jogando os scripts para o inicio do arquivo br/com/linkcom/neo/view/template/EntradaTag.jsp

O JSP de entrada poderia ficar assim:


Code:
 <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
 <%@ taglib prefix="n" uri="neo"%>
 <%@ taglib prefix="t" uri="template"%>
 <t:entrada>
 	<t:janelaEntrada>
 		<t:tabelaEntrada>
 			<t:property name="id"/>
 			<n:comboReloadGroup useAjax="true"> 
 				<t:property name="piezometro.estrutura.area.projeto" onLoadItens="verificaLista(this)" onchange="verificaSubItem(this)"/>			
 				<t:property name="piezometro.estrutura.area" onLoadItens="verificaLista(this)" onchange="verificaSubItem(this)"/>			
 				<t:property name="piezometro.estrutura" onLoadItens="verificaLista(this)" onchange="verificaSubItem(this)"/>			
 				<t:property name="piezometro" onLoadItens="verificaLista(this)" onchange="verificaSubItem(this)"/>			
 			</n:comboReloadGroup>
 			<t:property name="data" />
 		</t:tabelaEntrada>
 	</t:janelaEntrada>
 </t:entrada>
 
 


Essas alterações nos templates não causam efeito colateral!!
Guilherme, acho que o que você está querendo fazer é isso:

Code:
 <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
 <%@ taglib prefix="n" uri="neo"%>
 <%@ taglib prefix="t" uri="template"%>
 <script type="text/javascript">
 function verificaLista(obj){
 	if (obj.length == 1){
 		document.getElementById("msg."+obj.name).style.display = "";
 		document.getElementById("msg."+obj.name).innerHTML = "Nenhum registro encontrado";
 	} else {
 		document.getElementById("msg."+obj.name).style.display = "none";
 	}
 }
 /*
  * Essa função limpa os subItens que por acaso possam estar com a mensagem Nenhum registro encontrado
  */
 function verificaSubItem(obj){
 	var partes = obj.name.split('.');
 	partes.length = partes.length - 2;
 	for(var i = 0; i < partes.length; i++){
 		var msg = 'msg';
 		for(var j = 0; j < partes.length - i; j++){
 		    msg += '.'+partes[j];
 		}
 		document.getElementById(msg).style.display = "none";
 	}
 }
 </script>
 
 <t:entrada>
 	<t:janelaEntrada>
 		<t:tabelaEntrada>
 			<t:property name="id"/>
 			
 			<n:comboReloadGroup useAjax="true"> 
 			
 				<n:panel>Projeto</n:panel>
 				<n:panel>
 					<t:property name="piezometro.estrutura.area.projeto" onLoadItens="verificaLista(this)" onchange="verificaSubItem(this)"/>
 					<span id="msg.piezometro.estrutura.area.projeto"></span>
 				</n:panel>
 				
 				<n:panel>Área</n:panel>
 				<n:panel>
 					<t:property name="piezometro.estrutura.area" onLoadItens="verificaLista(this)" onchange="verificaSubItem(this)"/>
 					<span id="msg.piezometro.estrutura.area"></span>
 				</n:panel>
 				
 				<n:panel>Estrutura</n:panel>
 				<n:panel>
 					<t:property name="piezometro.estrutura" onLoadItens="verificaLista(this)" onchange="verificaSubItem(this)"/>
 					<span id="msg.piezometro.estrutura"></span>
 				</n:panel>
 				
 				<n:panel>Piezometro</n:panel>
 				<n:panel>
 					<t:property name="piezometro" onLoadItens="verificaLista(this)" onchange="verificaSubItem(this)"/>
 					<span id="msg.piezometro"></span>
 				</n:panel>
 
 			</n:comboReloadGroup>
 			<t:property name="data" />
 		</t:tabelaEntrada>
 	</t:janelaEntrada>
 </t:entrada>
 
 


A função verificaLista é a mesma que vc já tinha passado.

A função verificaSubItem é importante para a seguinte situação. Suponha que piezometro está com a mensagem nenhum item encontrado, se trocarmos o projeto, essa mensagem tem que ser limpa. É isso que essa função faz.

A tag tabelaEntrada coloca um panelGrid com 2 colunas. Então, se desejar que um property e um outro componente fiquem na mesma TD, eles devem ser englobados por um panel. Foi criado um panel para o label, porque como incluimos o property dentro de um panel, nós perdemos o panel do label. Também é possível fazer com 3 colunas, mas a mensagem ficaria alinhada a terceira coluna e nao ao lado do combo.
Se desejar fazer com 3 colunas me fale que eu faço o exemplo.

Nesse exemplo que te passei cada n:panel representa um TD dentro da tabela.


Veja se é isso mesmo, e me fale se ainda restar alguma dúvida..

Esse comportamento será o padrão do seu sistema? Porque se for, é mais fácil adicionar essa funcionalidade aos templates...
funciona de qualquer jeito
Você pode utilizar um command que possua uma propriedade projeto tb.
Exemplo:

Code:
 public class Bean {
      Projeto projeto;
      .. getters e setters...
 }
 


Code:
 public ModelAndView action(WebRequestContext request, Bean bean){
     Projeto projeto = bean.getProjeto();
 }
 


Assim você evita ter que manipular a string que veio no request.

Se chegar na requisicao
projeto=br.com.geoexplore.geoenterprise.adm.bean.Projeto[id=3]

O campo projeto será criado no bean e o id atribuido.
Túlio já temos suporte a formatação de java.util.Date, java.sql.Date, java.util.Calendar.
Colocaremos na próxima versão suporte para java.sql.Timestamp, boa sugestão.
Você pode utilizar Javascript também..


Tem como até ficar automático

Modificando os templates da listagem...
Vou verificar como isso pode ser feito via javascript e assim que tiver um exemplo eu te mando o código...


Na sua empresa vc faz com reload da tela ou via javascript?
Você pode criar um campo do tipo combo, e setar o valor do atributo reloadOnChange para true.

Isso fará com que toda vez que o combo for modificado seja feito um reload da tela.

No JSP você pode utilizar a tag c:if para determinar quais campos devem ser mostrados.

Pedro, WebRoot só existe se você estiver utilizando MyEclipse
Suponha que / é a raiz da aplicação..

Então você vai ter

/css/default.css
/WEB-INF/web.xml

etc...
Valew vinicius..

Bem. Se você se refere ao default.css que vem no diretorio sample. Não é necessário colocá-lo na aplicação. A não ser que deseje sobrescrevê-lo.

Se desejar sobrescrever o default.css que vem no neo. Você pode colocá-lo no diretório /css da sua aplicação.

Qualquer arquivo *.css dentro do /css será incluido no header da página.
Qualquer arquivo *.js dentro do /js será includi no header da página.
A documentação do NEO foi atualizada e agora possui um capítulo chamado CRUD.

Mas, para criar um filtro na listagem você pode fazer o seguinte:

Primeiro você deve criar a classe do filtro, no caso do CRUD, ela deve extender FiltroListagem.

Code:
 public class MeuFiltro  extends FiltroListagem {
     String nome;
     Municipio municipio;
     ... getters e setters...
 }
 


o segundo passo é atualizar o controller para possui o filtro:

Code:
 @Controller(.....)
 public class AlunoCrud extends CrudController<MeuFiltro, Aluno, Aluno> {
        ......
 }
 


o terceiro passo é atualizar a query no dao. Voce pode utilizar o método updateListagemQuery.

Code:
 public class AlunoDAO extends GenericDAO<Aluno> {
      public updateListagemQuery(QueryBuilder<BEAN> query, FiltroListagem _filtro){
           MeuFiltro filtro = (MeuFiltro) _filtro;
           query
                 .whereLike("aluno.nome", filtro.getNome())
                 .where("aluno.municipio = ?", filtro.getMunicipio());
          
      }
 }
 


e finalmente alterar o JSP de listagem:

Code:
 <t:listagem>
      <t:janelaFiltro>
          <t:tabelaFiltro>
                <t:property name="nome"/>
                <t:property name="municipio"/> <%-- Se municipio for uma entidade isso será um combo --%>
          </t:tabelaFiltro>
      </t:janelaFiltro>
      <t:janelaResultados> 
              ......
      </t:janelaResultados>
 </t:listagem>
 


É isso...
 
Perfil de rogel.garcia -> Mensagens enviadas por rogel.garcia [274] Ir para a página: Anterior  1, 2, 3 ... 15, 16 , 17, 18, 19 Próximo 
Ir para:   
Powered by JForum 2.1.7 © JForum Team