Duvidas Jboss seam

7 respostas
L

Pessoal estou com algumas duvidas com o seam,e o seguinte,por exemplo tenho minha classe de controle

@Name("controlCargo")  
  42. @Scope(ScopeType.CONVERSATION)  
  43. public class ControlCargoBean implements CargoBean, Serializable {  
  44.   
  45.      
  46.     @In(create = true)  
  47.     private transient FacesMessages facesMessages;  
  48.      
  49.     @In  
  50.     private Cargo cargo;  
  51.      
  52.     @DataModel  
  53.     @Out(required = false)  
  54.     private List<Cargo> cargos;  
  55.      
  56.     @In(create=true,value="daoCargo")  
  57.     private DaoCargo daoCargo ;  
  58.       
  59.     @DataModelSelection  
  60.     @Out(required=false,scope=ScopeType.SESSION)  
  61.     private Cargo selectedCargo;  
  62.   
  63.     public String excluir() {  
  64.         daoCargo.excluir(cargo);  
  65.         return "sucessDelete";  
  66.     }  
  67.   
  68.     @Factory("cargos")  
  69.     public void listarTodos() {  
  70.         cargos = daoCargo.listarTodos();  
  71.          
  72.     }  
  73.   
  74.     @Begin
  75.     public String editar() {  
  76.         cargo = daoCargo.findObjeto(cargo.getId());  
  77.         if (cargo != null) {  
  78.             return "editCargo";  
  79.         } else {  
  80.             facesMessages.addFromResourceBundle("entityNotFound");  
  81.         }  
  82.         return null;  
  83.     }  
  84.   
  85.      @End
  86.     public String salvar() {  
  87.         daoCargo.salvar(cargo);  
  88.         return "cargoPersist";  
  89.     }  
  90.   
  91.     @Destroy  
  92.     @Remove  
  93.     public void destroy() {  
  94.     }

as duvidas:
O meu Factory e td que esta nesta classe vive no escopo de conversação tambem?

E possivel iniciar a conversação em dois metodos diferentes e acabar ela no mesmo metodo por exemplo, a conversacao comeca tando na chamada do metodo novo ou na cahamada do editar e sempre acaba no salvar isso e possivel:

@Begin
  75.     public String editar() {  
  76.         cargo = daoCargo.findObjeto(cargo.getId());  
  77.         if (cargo != null) {  
  78.             return "editCargo";  
  79.         } else {  
  80.             facesMessages.addFromResourceBundle("entityNotFound");  
  81.         }  
  82.         return null;  
  83.     }  

@Begin
public String novo(){

return "";
}

  @End
  86.     public String salvar() {  
  87.         daoCargo.salvar(cargo);  
  88.         return "cargoPersist";  
  89.     }

Obrigado,T+ :wink:

7 Respostas

L

Alguem usa Seam por aki???

G

Não é necessário especificar @Begin se o escopo do seu componente é do tipo CONVERSATION.

When an @Begin method is encountered, the temporary conversation context is promoted toa long running conversation.

Logo, se o componente já é do tipo CONVERSATION, seus métodos já possuem esse recurso. Pelo menos é o que acho.

R

O seu método que está anotado com @Factory também vai ser do escopo de conversação.
Mas lembre-se que anotar com o escopo de conversação não resolve. É necessário informar qual método inicia a conversação, senão sua conversação durará apenas uma requisição.

Sim, basta vc anotar seus métodos assim:

@Begin(join=true)
public void a() {
}

@Begin(join=true)
public void b() {
}
L

Ok,mto obrigado pessoal,mas agora to com um probleminha aki,e o seguinte,tenho o seguinte codigo:

@DataModel
    @Out(required = false)
    private List<Cargo> cargos;
	
	 @Factory("cargos")
    public void listarTodos() {
        cargos = daoCargo.listarTodos(); //aki ele retorna uma List<Cargo>       
    }
Mas qdo abre a pagina ele executa o select porem da erro qdo tenta atribuir o resultado ,diz que nao consegue converter um List<Cargo> em um DataModel.
O que esta errado aki?

Obrigado.

R

Acho que o @Out para esse caso é desnecessário.
Como vc está usando na sua página essa factory?

L
no value do dataTable so assim
value#{cargos}
R

Retire o @Out e veja o que acontece.
Se der erro, poste o erro todo ai.

Criado 21 de outubro de 2009
Ultima resposta 22 de out. de 2009
Respostas 7
Participantes 3