dac
Fevereiro 4, 2008, 6:40pm
#1
Pessoal… tá acontecendo uma coisa louca aqui q não estou entendendo…
Alguem poderia me explicar oq tah pegando?
Seguinte…
Tenho uma action, q recebe o objeto cadastroBasico do html…
Tipo…
<s:form action="cadastro" method="post" cssClass="formulario" id="formCadastroUsuario">
<s:textfield name="cadastroBasico.apelido"
value="%{cadastroBasico.apelido}"
label="Apelido" size="15" maxlength="50"
required="true" />
...
A action recebe esse objeto já com o valor correto… q veio do formulario html… envia para uma classe de Serviços que chama o DAO e grava no banco…
tipo…
public void atualizar(CadastroBasicoPF cadastroBasico) throws ServiceException {
try {
DAOFactory factory = DAOFactory.getDefaultFactory();
CadastroBasicoPFDAO cadastroBasicoPFDAO = factory.getDAO(CadastroBasicoPFDAO.class);
cadastroBasicoPFDAO.salvar(cadastroBasico);
} catch (DAOException e) {
throw new ServiceException(e);
}
}
Beleza… ateh ai tudo certo… está gravando normalmente…
Estou utilizando OpenSessionInView em um servlet filter…
Agora… detalhe…
Se eu fizer isso:
public void atualizar(CadastroBasicoPF cadastroBasico) throws ServiceException {
try {
DAOFactory factory = DAOFactory.getDefaultFactory();
CadastroBasicoPFDAO cadastroBasicoPFDAO = factory.getDAO(CadastroBasicoPFDAO.class);
cadastroBasico.setApelido("TESTE TESTE TESTE");
cadastroBasicoPFDAO.salvar(cadastroBasico);
} catch (DAOException e) {
throw new ServiceException(e);
}
}
O apelido que está sendo gravado é o que vem do formulario… e nao o TESTE TESTE TESTE…
Alguem já viu isso???
Valeu se puderem ajudar…
dac
Fevereiro 6, 2008, 7:58pm
#2
Acho q entendi oq está acontencendo…
Porém não sei como resolver…
Os interceptors são executados antes e depois da action/jsp…
Um dos interceptors (param) é o cara q atribui os parametros q vem do formulario nos atributos da action…
Oq acontece eh q depois q a action é executada, o interceptor é chamado novamente, populando novamente os atributos…
Aí, no final de tudo, quando o commit é executado, os atributos estão novamente com o valor do formulario…
Beleza… dá pra resolver de diversas maneiras… na gambi…
Mas queria saber… alguem saberia dizer?
Se existe alguma forma de evitar que o interceptor param execute novamente após a action?
Acho q d tudo oq pensei, seria a melhor prática?
Não?
Valeu se puderem ajudar…
Cara… mudando um pouco de assunto… eu estou tentando fazer um DAOFactory e vi que estaz usando ela… tu poderia me passar a sua implementação pra mim dar uma estudada?? Estou fazendo uns testes aqui…
Abraço!
dac
Janeiro 6, 2009, 4:11pm
#4
eae… desculpa a demora da resposta… rs…
tipo… nao sei se interessa mais…
mas criei um padrão, [interface.package].[repository].[RepositoryEntityDAO]
onde por exemplo a implementacao o hibernate da interface app.dao.UsuarioDAO estaria em
app.dao.hibernate.HibernateUsuarioDAO…
[code]
@SuppressWarnings (“unchecked”)
public T getDAO(Class daoInterface)
throws DAOException {
try {
// Implementação:
// [interface.package].[repository].[RepositoryEntityDAO]
String daoPackage = daoInterface.getPackage().getName() + “.”
+ repository.name().toLowerCase();
String daoInterfaceName = daoInterface.getSimpleName();
String daoClassSimpleName = repository.name().toLowerCase()
.substring(0, 1).toUpperCase().concat(
repository.name().toLowerCase().substring(1))
+ daoInterfaceName;
String daoClassName = daoPackage + “.” + daoClassSimpleName;
Class daoClass = Class.forName(daoClassName);
return (T) daoClass.newInstance();
} catch (Exception e) {
throw new DAOException(e);
}
}[/code]
Ainda vou colocar um StringBuilder ai… mas basicamente é isso… vc pode criar o seu padrão para facilitar… ajuda bastante
Fiz algo parecido para criar serviços…