Autor |
Mensagem |
![[Post New]](/forum/templates/default/images/icon_minipost_new.gif) 08/08/2007 14:09:25
|
valdecijunior
Equipe
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.
 |
|
 |
![[Post New]](/forum/templates/default/images/icon_minipost_new.gif) 08/08/2007 20:18:35
|
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...
|
|
 |
![[Post New]](/forum/templates/default/images/icon_minipost_new.gif) 08/08/2007 20:37:57
|
valdecijunior
Equipe
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.
 |
|
 |
![[Post New]](/forum/templates/default/images/icon_minipost_new.gif) 08/08/2007 22:19:19
|
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...
|
|
 |
![[Post New]](/forum/templates/default/images/icon_minipost_new.gif) 09/08/2007 15:22:49
|
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
|
|
 |
![[Post New]](/forum/templates/default/images/icon_minipost_new.gif) 09/08/2007 18:29:50
|
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>
|
|
 |
![[Post New]](/forum/templates/default/images/icon_minipost_new.gif) 12/08/2007 11:33:39
|
valdecijunior
Equipe
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.
 |
|
 |
![[Post New]](/forum/templates/default/images/icon_minipost_new.gif) 12/08/2007 13:21:17
|
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"/>
|
|
 |
![[Post New]](/forum/templates/default/images/icon_minipost_new.gif) 12/08/2007 13:50:19
|
valdecijunior
Equipe
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.
 |
|
 |
![[Post New]](/forum/templates/default/images/icon_minipost_new.gif) 14/08/2007 17:17:44
|
valdecijunior
Equipe
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.
 |
|
 |
![[Post New]](/forum/templates/default/images/icon_minipost_new.gif) 14/08/2007 20:38:34
|
pedro.goncalves
Equipe
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
 |
|
 |
![[Post New]](/forum/templates/default/images/icon_minipost_new.gif) 15/08/2007 00:16:38
|
valdecijunior
Equipe
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.
 |
|
 |
![[Post New]](/forum/templates/default/images/icon_minipost_new.gif) 15/08/2007 11:55:32
|
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)
|
|
 |
![[Post New]](/forum/templates/default/images/icon_minipost_new.gif) 15/08/2007 19:27:48
|
pedro.goncalves
Equipe
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
 |
|
 |
![[Post New]](/forum/templates/default/images/icon_minipost_new.gif) 16/08/2007 18:48:57
|
valdecijunior
Equipe
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.
 |
|
 |
|