[quote=jyoshiriro]
E, uma dica: Acho que fez algo que era desnecessário com o Struts 2.
Se eu fosse você, criaria o método “validate()”:
Dai, no seu “login()” você bota só o código do caso de uso em si. O próprio framework vai ver se foi acrescentado um “actionError” ou “fieldError” e manda o retorno pra “input” ou não pra você ;).[/quote]
Cara o que eu ia fazer era criar uma classe de UserBO que fizesse todas as validações necessárias da entidade User e mais alguma coisininha, posso fazer da sua maneira tbm…
Os setters and getters estão EXTRAMAMENTE iguais, foram gerados automaticamente
Vou postar meu código todo aqui para que veja com seus próprios olhos:
[code]package net.Agile2Go.view.actions.user;
import net.Agile2Go.domain.entities.User;
import net.Agile2Go.domain.repositories.UserRepository;
import net.Agile2Go.infrastructure.util.security.DisableSecurityAction;
import net.Agile2Go.view.actions.BasicAction;
import org.apache.commons.lang.StringUtils;
import org.apache.log4j.Logger;
import org.apache.struts2.convention.annotation.Action;
import org.apache.struts2.convention.annotation.Namespace;
import org.apache.struts2.convention.annotation.ParentPackage;
import org.apache.struts2.convention.annotation.Result;
import org.apache.struts2.convention.annotation.ResultPath;
import com.opensymphony.xwork2.ModelDriven;
@Namespace(value = “/”)
@ResultPath(value = “/”)
@ParentPackage(value = “default”)
public class UserAction extends BasicAction implements ModelDriven,
DisableSecurityAction {
/**
* Atributo de serialização, informa a versão da classe para o conteiner
*/
private static final long serialVersionUID = 8278524612322334361L;
/**
* Atributo de log, grava mensagens e avisos durante a execução do sistema
*/
private Logger log = Logger.getLogger(getClass());
/**
* Caminhos das páginas jsps
*/
private static final String PAGINA_LOGIN = "/login.jsp";
// private static final String PAGINA_ADM_HOME =
// "/WEB-INF/content/admin/home.jsp";
private static final String PAGINA_USER_HOME = "/jsp/home.jsp";
/**
* Atributo que permite efetuar as operações referente a entidade usuário
*/
private UserRepository repository;
/**
* Atributo que representa um usuário
*/
private User user;
/**
* Login do usuário
*/
private String username;
/**
* Senha do usuário
*/
private String password;
/**
* Este bloco de código será executado no construtor logo após a chamada de
* super(), para que o user não start com null.
*/
{
user = user == null ? new User() : user;
}
@Action(value = "login", results = {
@Result(name = SUCCESS, location = PAGINA_USER_HOME),
@Result(name = INPUT, location = PAGINA_LOGIN),
@Result(name = ERROR, location = PAGINA_LOGIN)})
public String login () {
try {
if ( StringUtils.isBlank(username) ) {
addActionError("Type a login!");
}
if ( StringUtils.isBlank(password) ) {
addActionError("Type a password!");
}
if ( getActionErrors().size() > 0 ) {
return INPUT;
}
user.setLogin(username);
user.setPassword(password);
user = repository.userWithLogin(user.getLogin(), user.getPassword());
if ( user == null ) {
addActionError("User not found in the database!");
return INPUT;
}
session.put("user", user);
return SUCCESS;
} catch (Exception e) {
log.error(e.getLocalizedMessage(), e);
addActionError("A expected error has ocurred!");
session.clear();
return ERROR;
}
}
public final String getUsername() {
return username;
}
public final void setUsername(String username) {
this.username = username;
}
public final String getPassword() {
return password;
}
public final void setPassword(String password) {
this.password = password;
}
public void setRepository(UserRepository repository) {
this.repository = repository;
}
public User getModel() {
return user;
}
}
[/code]