JSF - usar os métodos da superclasse de um managed-bean

16 respostas
Metallica

Olá,

Estou tendo esse problema no Java Server Faces de não conseguir chamar os métodos da superclasse pela subclasse.

<managed-bean>
        <managed-bean-name>user</managed-bean-name>
        <managed-bean-class>br.bean.Usuario</managed-bean-class>
        <managed-bean-scope>session</managed-bean-scope>
    </managed-bean>
    
    <managed-bean>
        <managed-bean-name>aluno</managed-bean-name>
        <managed-bean-class>br.bean.Aluno</managed-bean-class>        
        <managed-bean-scope>session</managed-bean-scope>
    </managed-bean>

No caso ai Aluno é um Usuário (extends), porém no meu código não consigo fazer #{aluno.metodoDeUser}
Mas preciso muito, existe alguma tag pra fazer isso?
Ou tem que copiar e colar mesmo? :lol:

Abraços

16 Respostas

Metallica

Nossa, mas NINGUÉM sabe isso?

sjoaquim

O código a seguir resolveria seu problema?

public String metodoDaSuperClasse(){ return super.metodoDaSuperClasse(); }

sjoaquim

OBS: esse método deve ser colocado na subclasse, obviamente! :smiley:

T

o método na super classe é public?

Metallica

Resolver resolve, eu já tinha pensando nisso, mas fica meio POG.
Não tem um jeito mesmo de herdar os métodos?

T

voce esta herdando eles, mas so tera acesso se eles forem public, pode postar o seu BackBean e a superclasse a qual ela extende?

Metallica
thgdias:
voce esta herdando eles, mas so tera acesso se eles forem public, pode postar o seu BackBean e a superclasse a qual ela extende?
Opa, claro, bem lembrado.
public class Usuario {
    private String usuario;
    private String senha;
     
    public String getSenha() {
        return senha;
    }

    public void setSenha(String senha) {
        this.senha = senha;
    }

    public String getUsuario() {
        return usuario;
    }

    public void setUsuario(String usuario) {
        this.usuario = usuario;
    }

    public String cadastra(Usuario u) {
     // faz algumas coisas
    }
public class Aluno extends Usuario{
    private int rg;
    private String nome;
    private int codigoCurso;
    private double nota;

    //getters e setters
Em uma parte da minha aplicação eu preciso chamar o setUsuario só que num managed-bean Aluno :
&lt;tr&gt;
                    &lt;td&gt;Nome:&lt;/td&gt;
                    &lt;td&gt;&lt;h:inputText value="#{aluno.nome}"/&gt;&lt;/td&gt;
               &lt;/tr&gt;
                
               ...

               &lt;tr&gt;
                    &lt;td&gt;Usuario:&lt;/td&gt;
                    &lt;td&gt;&lt;h:inputText value="#{aluno.}"/&gt;&lt;/td&gt; &lt;!-- AQUI O METODO NAO ESTA DISPONIVEL--&gt;
                &lt;/tr&gt;
T

bom, pelos seus códigos, aparentemente não há nada de errado… eu uso objetos de superclasses e não tenho problema algum com isso… talvez o problema esteja sendo outro… que erro dá?

Metallica

Não é erro, é como eu tinha falado, eu só queria usar os métodos herdados sem ter que criar um método novo chamando super.
E gostaria de saber se não tem alguma tag especifica no XML que diz que Aluno é filha de Usuario e por isso poderia chamar os metodos herdados.

T

nao tem tag nenhuma… e so chamar ele e pronto… como no exemplo que voce mesmo deu, seu managed bean ja estara herdando ele, logo… terá acesso aos metodos que forem publicos.

#{aluno.metodoDeUser}

mais nada mesmo pra fazer!

Metallica

thgdias:
nao tem tag nenhuma… e so chamar ele e pronto… como no exemplo que voce mesmo deu, seu managed bean ja estara herdando ele, logo… terá acesso aos metodos que forem publicos.

#{aluno.metodoDeUser}

mais nada mesmo pra fazer!


É exatamente esse o problema, não herda.
Eu não consigo fazer:

#{aluno.metodoDeUser}

Bom, mas já vi que o problema só pode ser resolvido assim, fazer o que.

T

tem alguma outra coisa errada ai… ve la no log do seu container pra ver se ele nao ta reclamando de nada… tem que funcionar dessa maneira

fwbrasil

Alguma coisa está errada. Uso métodos herdados sem nenhum problema aqui.

Você está usando assim?

Se você usar setUsuario não vai funcionar mesmo porque ele vai procurar o get/set de uma propriedade chamada “setUsuario”

sjoaquim

Qual implementação de JSF você está usando? Às vezes ela tem algum problema com reflection. Digo porque se você chamar o método <Classe>.getDeclaredMethods(), os métodos de superclasse não vão aparecer nesse caso.

Metallica

Estou usando JSF 1.2, a que vem no Netbeans 6.0

sjoaquim

É, então não deve ser esse o problema…

Criado 23 de agosto de 2008
Ultima resposta 26 de ago. de 2008
Respostas 16
Participantes 4