Struts 2 + Hibernate

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…

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!

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…