Boas Práticas OO e Arquitetura do Projeto

Boa tarde senhores.

Estou em um projeto em Struts 2 e tive um lampejo com algumas dúvidas que a falta de tempo não me deixam pesquisar nem estudar a respeito. Tipo a primeira é:

Faço todas as minhas validações de formulário na Action (BBean JSF / Controller VRaptor). Isso é o mais indicado ou o uso de alguns validation em XML ou até Java Script é a melhor solução?

Ex:


if(postoGradEspec.getCodPostoGradEspec() == 0 || cqes.getCodCQES() == 0 || omAtual.getCodOrgao() == 0 ||
				permissionario.getNome().length() < 2 || permissionario.getDeSenha().equals(null) || confirSenha.equals(null)) {
			addActionMessage(":: Campos Obrigatórios não preenchidos!");
			permissionario = new Permissionario();
			return "cadastrarUsuario";

Outra dúvida é a seguinte. Já que tenho validações na minha Action não me sinto confortável inserindo código de negócio nessa Classe. Não existiria outro lugar para o meu método salvarUsuario por exemplo? Tem que estar nessa Action que valida esses dados?

Exemplo:

public String cadastrarUsuario() {
		if(postoGradEspec.getCodPostoGradEspec() == 0 || cqes.getCodCQES() == 0 || omAtual.getCodOrgao() == 0 ||
				permissionario.getNome().length() < 2 || permissionario.getDeSenha().equals(null) || confirSenha.equals(null)) {
			addActionMessage(":: Campos Obrigatórios não preenchidos!");
			permissionario = new Permissionario();
			return "cadastrarUsuario";
		}else { 
			if(permissionario.getDeSenha().equals(confirSenha)) {
				if(this.salvar(permissionario, "cadastrarUsuario", "login")){
					return "login";
				}else{
					return "cadastrarUsuario";
				}
			}else {
				addActionMessage(":: Senhas informadas são diferentes!");
				permissionario = new Permissionario();
				return "cadastrarUsuario";
			}
		}
	}





private Boolean salvar(Permissionario usuario, String tipo, String retorno){
		permissionario = new Permissionario();
		permissionario = PermissionarioDAO.getInstance().getById(usuario.getNip());
		if(permissionario != null) {
			if(tipo.equals("cadastrarUsuario")) {
				addActionMessage(":: Já existe um cadastro para o NIP informado. Verifique se o NIP e a Senha estão correto!");
				return false;
			}else {
				permissionario.setCqes(cqes);
				permissionario.setPostoGradEspec(postoGradEspec);
				permissionario.setOmAnterior(omAtual);
				permissionario.setNome(usuario.getNome().toUpperCase());
				permissionario.setNomeGuerra(usuario.getNomeGuerra().toUpperCase());
				permissionario.setEmail(usuario.getEmail());
				permissionario.setCpf(usuario.getCpf());
				permissionario.setFone(usuario.getFone());
				PermissionarioDAO.getInstance().save(permissionario);
				addActionMessage(":: Edição realizada com sucesso!");
				return true;
			}
		}else {
			PermissionarioBO permBO	= new PermissionarioBO();
			permissionario = permBO.permissionarioDefault(usuario);
			permissionario.setCqes(cqes);
			permissionario.setPostoGradEspec(postoGradEspec);
			permissionario.setOmAnterior(omAtual);
			permissionario.setNome(usuario.getNome().toUpperCase());
			permissionario.setNomeGuerra(usuario.getNomeGuerra().toUpperCase());
			PermissionarioDAO.getInstance().save(permissionario);
			addActionMessage(":: Cadastro realizado com sucesso!");
			return true;
		}
	}

Aguardo Ajuda.

Utilizar o Java Script para isso é o ideal?