[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 
CRUD Master-Detalhe  XML
Índice dos Fóruns -> Dúvidas Ir para a página: 1, 2, 3, 4 Próximo 
Autor Mensagem
valdecijunior
Equipe
[Avatar]
Membro desde: 23/06/2007 11:56:42
Mensagens: 24
Localização: Vitoria da Conquista - Ba
Offline

e aí pessoal...

seguinte... gostaria de saber se o NEO traz alguma implementação pronta para telas CRUD Master-Detalhe.

Tenho uma situação onde preciso fazer um cadastro de metas. Pórem, essas metas possuem uma lista de acões e uma lista de objetivos. Implementei o cadastro separadamente e está tudo funcionando tudo blz.

Contudo, gostaria de centralizar o cadastro numa única tela para facilitar a vida do usuário... estive olhando a tag <t:detalhe> e vi que ela aparentemente resolve o problema na entrada dos dados.. mas não consegui nada com a listagem....

Dei uma olhada também neste post sobre uma tela de multiplos cadastros... mas implementação usada não utiliza CrudController...

Então minha duvida é a seguinte: Utilizando a tag <t:detalhe> vou conseguir resolver o problema tanto na entrada como na listagem dos dados? Se sim, podem me passar um exemplo de sua utilização?!?!?! Se não, qual seria a alternativa? Uma implementação sem CrudController semelhante ao que vou utilizado no post acima???

vlw galera fico no aguardo... ahh e parabéns por responderem tão prontamente... isso aumenta a segurança da utilização do framework pois temos a certeza que seremos prontamente atendidos em caso de problemas...

flw

Valdeci Junior
MasterSoft Sistemas Ltda.
[Email] [Yahoo!] [MSN]
rogel.garcia
Xiita

Membro desde: 17/04/2007 16:35:03
Mensagens: 275
Offline

Fala valdeci... sempre tentamos responder assim que lemos os posts.. às vezes nem sempre é possível pos estamos trabalhando ou fazendo alguma atividade.. mas a idéia é responder sempre e o mais rápido possível..

sobre sua dúvida.. o neo tem um suporte a master/detalhe...
mas apenas para o jsp de entrada de dados.. para a listagem nao tem nenhum componente faclitador..
para a entrada de dados.. vc faria o seguinte

Code:
 <t:entrada>
     <t:janelaEntrada>
          <t:tabelaEntrada>
                <t:property name="..."/>
          </t:tabelaEntrada>
 
          <t:detalhe property="nome da propriedade detalhe">
               <t:property name="..."/>
          </t:detalhe>
     </t:janelaEntrada>
 </t:entrada>
 


Se vc tem um bean assim:

Code:
 class Principal {
       String nome;
       List<Detalhe> listaDetalhe; //relacionamento one to many
 }
 
 class Detalhe {
       Integer valor;
       Principal principal; //relacionamento many to one
 }
 

(lembre-se dos getters e setters e das annotations para configurar o hbernate)

Seu jsp ficaria assim:
Code:
 <t:entrada>
     <t:janelaEntrada>
          <t:tabelaEntrada>
                <t:property name="nome"/>
          </t:tabelaEntrada>
 
          <t:detalhe property="listaDetalhe">
               <t:property name="valor"/>
          </t:detalhe>
     </t:janelaEntrada>
 </t:entrada>
 


no seu dao<Principal> vc teria que extender o método updateSaveOrUpdate assim:

Code:
 public void updateSaveOrUpdate(SaveOrUpdateStrategy save) {
     save.saveOrUpdateManaged("listaDetalhe");
 }
 


e também o updateEntradaQuery

Code:
 public void updateEntradaQuery(QueryBuilder<Principal> query) {
     query.fetchCollection("listaDetalhe");
 }
 


pronto..

é necessário atualizar o dao para carregar e salvar o detalhe...
no jsp a tag detalhe monta um datagrid com botoes para manipular os itens do detalhe...
valdecijunior
Equipe
[Avatar]
Membro desde: 23/06/2007 11:56:42
Mensagens: 24
Localização: Vitoria da Conquista - Ba
Offline

vlw rogel isso vai ajudar bastante....

E com relação a listagem? o que vc sugere que eu faça para exibir as informações na mesma tela? Tem alguma forma de facilitar essa parte?

...


t+

Valdeci Junior
MasterSoft Sistemas Ltda.
[Email] [Yahoo!] [MSN]
rogel.garcia
Xiita

Membro desde: 17/04/2007 16:35:03
Mensagens: 275
Offline

bem... na listagem vc poderia fazer algo do tipo

no DAO vc faz o mesmo fetchCollection("listaDetalhe").. em updateListagemQuery

no JSP vc faz mais ou menos o seguinte:

Code:
 <t:listagem>
     ...
     <t:tabelaResultados>
          <n:column>
              <t:property name="nome"/>
              <n:dataGrid property="listaDetalhe">
                    <t:property name="valor"/>
              </n:dataGrid>
          </n:column>
     </t:tabelaResultados>
     ...
 </t:listagem>
 


vc terá que arrumar melhor o dataGrid.. talvez colocar um panelGrid dentro do n:column para organizar as propriedades...
mas a idéia seria essa...

vai depender de como vc deseja que os dados do detalhe sejam mostrados na tela de listagem.... dependendo, outras ideias poderiam ser usadas...
robmsjr
MultiAction

Membro desde: 26/06/2007 19:30:49
Mensagens: 88
Offline

Rogel,

Num caso desse de master detail... Eu queria ter um combo na <t:tabelaEntrada> que qnd um opção fosse selecionada apareceria o <t:detalhe> e qnd a outra fosse selecionada ele sumiria...

Tem algum modo simples para fazer isso?

abraços
rogel.garcia
Xiita

Membro desde: 17/04/2007 16:35:03
Mensagens: 275
Offline

vc pode fazer isso dando um reload na tela..

Code:
 <t:property name="combo" reloadOnChange="true"/>
 .
 .
 .
 <c:if text="${bean.opcaoSelecionada}">
     <t:detalhe property="">
     </t:detalhe>
 </c:if>
 

valdecijunior
Equipe
[Avatar]
Membro desde: 23/06/2007 11:56:42
Mensagens: 24
Localização: Vitoria da Conquista - Ba
Offline

e ai rogel blz...

implementei as telas de cadastro e listagem Master-Detalhe... fiz algumas alterações nas tags do NEO para poder implementar a listagem mas ambas funcionaram blz...

tô com um outro problema agora que independe da CRUD Master-Detalhe... quando eu tento editar um registro ele num está alterando o registro atual mas sim criando uma cópia do registro... na verdade e como se ele salvasse um novo com as mesmas informações ao invés de editar...

e tmb está acontecendo um erro no momento da exclusão de um registro...

Code:
    
 * not-null property references a null or transient value: br.inf.mastersoft.agil.ci.pojo.metas.Meta.nome; nested exception is org.hibernate.PropertyValueException: not-null property references a null or transient value: br.inf.mastersoft.agil.ci.pojo.metas.Meta.nome
           o not-null property references a null or transient value: br.inf.mastersoft.agil.ci.pojo.metas.Meta.nome
 


seriam esses problemas no mapeamento ou na implementação do DAO???

segue abaixo o código do DAO de meta...

Code:
 public class MetaDAO extends GenericDAO<Meta> {
 
 	@Override
 	public void updateEntradaQuery(QueryBuilder<Meta> query) {
 		query.fetchCollection("acoes");
 		query.fetchCollection("objetivos");
 	}
 
 	@Override
 	public void updateSaveOrUpdate(SaveOrUpdateStrategy save) {
 		save.saveOrUpdateManagedNormal("acoes");
 		save.saveOrUpdateManagedNormal("objetivos");
 	}
 
 	public Meta findMetaWithDetails(String codigo) {
 		return new QueryBuilder<Meta>(getHibernateTemplate())
 			.from(Meta.class)
 			.fetchCollection("acoes")
 			.fetchCollection("objetivos")
 			.where("codigo = ?", Long.valueOf(codigo))
 			.unique();
 	}
 }
 


o método findMetaWithDetails eu usei apenas para implementar a listagem do Master-Detalhe...

abaixo o mapeamento de Meta...

Code:
 @Entity
 @Table(name="CI_META")
 @SequenceGenerator(name="GEN_META_ID", sequenceName="GEN_META_ID", allocationSize=1)
 public class Meta implements Serializable {
 
 	private static final long serialVersionUID = 1L;
 
 	private Long codigo;
 	private String nome;
 	private String descricao;
 	private List<Objetivo> objetivos;
 	private List<Acao> acoes;
 	private Date dataLimite;
 	private BigDecimal valorOrcado;
 	private BigDecimal valorRealizado;
 
 	@Id
 	@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="GEN_META_ID")
 	@Column(name="CD_META")
 	public Long getCodigo() {
 		return codigo;
 	}
 
 	@OneToMany(cascade={CascadeType.PERSIST, CascadeType.REMOVE}, mappedBy="meta")
 	public List<Acao> getAcoes() {
 		return acoes;
 	}
 
 	@Required
 	@Column(name="DT_LIMITE_META", nullable=false)
 	public Date getDataLimite() {
 		return dataLimite;
 	}
 
 	@Column(name="DS_META", length=255)
 	public String getDescricao() {
 		return descricao;
 	}
 
 	@Required
 	@DescriptionProperty
 	@Column(name="NM_META", length=100, nullable=false)
 	public String getNome() {
 		return nome;
 	}
 
 	@OneToMany(cascade={CascadeType.PERSIST, CascadeType.REMOVE}, mappedBy="meta")
 	public List<Objetivo> getObjetivos() {
 		return objetivos;
 	}
 
 	@Required
 	@Column(name="VL_ORCADO", nullable=false, precision=18, scale=2)
 	public BigDecimal getValorOrcado() {
 		return valorOrcado;
 	}
 
 	@Column(name="VL_REALIZADO", precision=18, scale=2)
 	public BigDecimal getValorRealizado() {
 		return valorRealizado;
 	}
 
 ....
 


quando usava o SpringMVC e acontecia esse problema de duplicação do registro tinha q subscrever o método Code:
protected ModelAndView handleInvalidSubmit(HttpServletRequest request, HttpServletResponse response) throws Exception 
para corrigir o erro... mas suponho que os controllers do NEO já façam isso... o que seria então a causa do problema???

fico no aguardo....

vlw, obrigado



Valdeci Junior
MasterSoft Sistemas Ltda.
[Email] [Yahoo!] [MSN]
rogel.garcia
Xiita

Membro desde: 17/04/2007 16:35:03
Mensagens: 275
Offline

deve tá faltando na sua tela de entrada de dados o campo primary key...


se o seu primary key for id...


tem que colocar na entrada


<t:property name="id"/>
valdecijunior
Equipe
[Avatar]
Membro desde: 23/06/2007 11:56:42
Mensagens: 24
Localização: Vitoria da Conquista - Ba
Offline

vlw rogel, o erro de duplicação foi resolvido... achei q num tinha a necessidade de informar o campo de primary key... mas já está ok!!!

No entanto, ainda persiste o erro ao deletar conforme relatado no tópico anterior... alguma idéia de como resolver isso???

vlw obrigado

Valdeci Junior
MasterSoft Sistemas Ltda.
[Email] [Yahoo!] [MSN]
valdecijunior
Equipe
[Avatar]
Membro desde: 23/06/2007 11:56:42
Mensagens: 24
Localização: Vitoria da Conquista - Ba
Offline

e aí pessoal...

alguma idéia de como posso fazer para resolver esse problema ao deletar um registro...

fico no aguardo... flw

Valdeci Junior
MasterSoft Sistemas Ltda.
[Email] [Yahoo!] [MSN]
pedro.goncalves
Equipe
[Avatar]
Membro desde: 17/04/2007 16:12:20
Mensagens: 539
Localização: Belo Horizonte - MG
Offline

valdeci.. esse erro de duplicação geralmente ocorre quando você nao passa a chave primária.. ai o hibernate reconhece que não tem e roda um insert ao invés de um update...

confere ai se está passando a chave primária..

teh

Pedro Gonçalves
http://pedrogoncalves.com.br
[Email] [WWW] [MSN]
valdecijunior
Equipe
[Avatar]
Membro desde: 23/06/2007 11:56:42
Mensagens: 24
Localização: Vitoria da Conquista - Ba
Offline

fala pedro... como tinha dito acima o problema da duplicação já foi resolvido... meu problema agora é quando eu tento excluir um registro... ele dá o seguinte erro:
Code:
     * not-null property references a null or transient value: br.inf.mastersoft.agil.ci.pojo.metas.Meta.nome; nested exception is org.hibernate.PropertyValueException: not-null property references a null or transient value: br.inf.mastersoft.agil.ci.pojo.metas.Meta.nome
           o not-null property references a null or transient value: br.inf.mastersoft.agil.ci.pojo.metas.Meta.nome
 

o código do DAO e do mapeamanto de estão postados acima... alguma idéia do que fiz de errado????

vlw, fico no aguardo....

Valdeci Junior
MasterSoft Sistemas Ltda.
[Email] [Yahoo!] [MSN]
rogel.garcia
Xiita

Membro desde: 17/04/2007 16:35:03
Mensagens: 275
Offline

no getNome

tem assim

@Column(name="NM_META", length=100, nullable=false)

tenta tirar o nullable pra ver se rola...

@Column(name="NM_META", length=100)

para o neo validar o lenght vc pode colocar

@MaxLength(100)
pedro.goncalves
Equipe
[Avatar]
Membro desde: 17/04/2007 16:12:20
Mensagens: 539
Localização: Belo Horizonte - MG
Offline

Rógel.. isso que você pos ai não vai fazer muita diferença não.. a não ser para a validação, no caso adiiconando o maxlength... ae rógel.. poderíamos por o suporte ao hibernate validator.. o que acha??

teh

Pedro Gonçalves
http://pedrogoncalves.com.br
[Email] [WWW] [MSN]
valdecijunior
Equipe
[Avatar]
Membro desde: 23/06/2007 11:56:42
Mensagens: 24
Localização: Vitoria da Conquista - Ba
Offline

pessoal,

retirando de TODOS os campos o nullable=false funcionou... mas acho que o NEO deveria permitir que se configurasse o hibernate ao critério do desenvolvedor. Nesse caso, por exemplo, vou ter q retirar de todas as classes de mapeamento o nullable=false.

De qualquer forma, obrigado a todos pela ajuda...

t+

Valdeci Junior
MasterSoft Sistemas Ltda.
[Email] [Yahoo!] [MSN]
 
Índice dos Fóruns -> Dúvidas Ir para a página: 1, 2, 3, 4 Próximo 
Ir para:   
Powered by JForum 2.1.7 © JForum Team