JSF: Dúvida sobre conceito

Pessoal, dúvida basica, relacionada a conceito do framework mesmo.

O ManagerBean utilizado para controlar o escopo no JSF é um ValueObject/Bean tradicional, não é?
O que eu quero dizer que o MB é composto por atributos, seus métodos acessores (getters e setters) + os métodos controladores das funcionalidas, ou seja, Incluir, Alterar, Listar, etc.

Isso é mesmo obrigatório? Fixar tudo em uma única classe?
Gostaria de entender melhor o engine por este ponto de vista…

Um exemplo de MB como foi descrito:


public class Editora implements Serializable{
	private static final String SUCESS 		= "success";
	private static final String FAIL 		= "failure";
	private EditoraDao edao					= new EditoraDao();
	public ArrayList<Editora> listaEditora	= new ArrayList<Editora>();

	private int id_editora;
	private String nm_editora;
	private String fl_ativo;

	public Editora(int id_editora,	String nm_editora, String fl_ativo){
		this.id_editora = id_editora;
		this.nm_editora = nm_editora;
		this.fl_ativo = fl_ativo;
	}

	public Editora(){
		findEditora();
	}

	public int getId_editora(){
		return id_editora;
	}

	public void setId_editora(int id_editora){
		this.id_editora = id_editora;
	}

	public String getNm_editora(){
		return nm_editora;
	}

	public void setNm_editora(String nm_editora){
		this.nm_editora = nm_editora;
	}

	public String getFl_ativo(){
		return fl_ativo;
	}

	public void setFl_ativo(String fl_ativo){
		this.fl_ativo = fl_ativo;
	}

	public void setEditora(Editora e){
		this.setId_editora( e.getId_editora() );
		this.setNm_editora( e.getNm_editora() );
		this.setFl_ativo( e.getFl_ativo() );		
	}
	
	public Editora getEditora(){
		return new Editora(this.getId_editora(), this.getNm_editora(), this.getFl_ativo());		
	}

	public void getEditora(int id){
		this.setEditora( edao.getEditora(id) );
	}

	public ArrayList<Editora> getListaEditora(){
		return listaEditora;
	}

	public void setListaEditora(ArrayList<Editora> listaEditora){
		this.listaEditora = listaEditora;
	}

	public String findEditora(){
		listaEditora = edao.getEditora();

		if( listaEditora!=null && listaEditora.size()>0 ){
			return SUCESS;			
		}else{
			return FAIL;
		}
	}
	
	public String gravarNovo(){
		Editora e = this.getEditora();
		if( edao.gravar(e) ){
			return SUCESS;
		}else{
			return FAIL;
		}
	}
	
	public String atualizar(){
		Editora e = this.getEditora();
		if( edao.atualizar(e) ){
			return SUCESS;
		}else{
			return FAIL;
		}
	}

	public String delEditora(int id){
		if( edao.apagar(id) ){
			return SUCESS;
		}else{
			return FAIL;
		}
	}

	public void editar(ActionEvent evento){
		UIParameter param = (UIParameter) evento.getComponent().findComponent("editoraId");
		Integer codE      = Integer.parseInt( param.getValue().toString() );
		this.getEditora( codE );
	}

	public void apagar(ActionEvent evento){
		UIParameter param = (UIParameter) evento.getComponent().findComponent("editoraDelId");
		Integer codE      = Integer.parseInt( param.getValue().toString() );
		this.delEditora( codE );
	}

}

Thanks!

Olá, não necessariamente você tem que usar o MB como seu java bean, pois dessa forma o seu MB ficaria sobrecarregado.
O seu MB pode encapsular o seu Pojo e a sua classe de servico,como no exemplo abaixo;

public class ProfessorBackingBean {

private ProfessorServico servico = new ProfessorServico();
private Professor bean; // get e set
private String operacao; // get e set

public List<Professor> listarTodasAsProfessors() {
    return this.servico.listarTodasAsProfessors();
}

public String prepararInserir() {
    this.operacao = "INSERIR";
    return "editarProfessor";
}

public String prepararAtualizar(Professor bean) {
    this.operacao = "ATUALIZAR";
  bean = servico.getBeanPorId(bean);
    return "editarProfessor";
}

public String save() {
//coisas antes de salvar
return "listProfessor";
}
public String cancel() {
//faz alguma coisa
return "editProfessor";
}

}

// a classe professor eh um bean java normal, que possui 2 atributos por exemplo id e nome

então na página jsp ou xhtml você usaria da seguinte forma.

<h:inputText value="#{professorBackingBean.bean.nome}"/>

Lembrando que o MB “ProfessorBackingBean” está mapeado como "professorBackingBean " no faces-config.xml

Humm! Foi o que eu imaginei.
Vou fazer uns testes e qq dúvida coloco aqui denovo.

[]'s :wink: