Jstl d:

Heyy!

Primeiro programa q tento fazer com JSTL e blábla´blá
Preencho um arraylist com um monte de objeto LoginDTO.
Mas na hora de montar um tabela no html me da erro.

                <c:forEach items="${ViewLogins}" var="LoginDTO">
                    <tr>
                        <td><c:out value="${LoginDTO.loginname}"/></td>
                    </tr>
                </c:forEach>

javax.el.PropertyNotFoundException: Property ‘loginname’ not found on type com.br.aplicacaomvc.model.dto.LoginDTO

Aquichama a leitura do banco:


            LoginDAO lg = new LoginDAO();
            List Logins = lg.ViewAll();
            request.setAttribute("ViewLogins", Logins);

Aqui le o banco.

    public List ViewAll() throws SQLException{
        List<LoginDTO> Logins = new ArrayList<LoginDTO>();
        String sSQL = "select * from Login";

        ResultSet rs = getDatabase().getInstance().createStatement().executeQuery(sSQL);
        while(rs.next())
        {
            Logins.add(DataToDTO(rs));
        }
        return Logins;
    }


        private LoginDTO DataToDTO(ResultSet rs)throws SQLException{
        LoginDTO lg = new LoginDTO();
        lg.setLoginName(rs.getString("LoginName"));
        lg.setPassword(rs.getString("Password"));
        return lg;
    }

Esse tio ae, loginname, tem no LoginDTO.

public class LoginDTO {
    private String loginname;
    private String password;

Já tentei um monte de coisa aqui e nada.

Até mais…

Ow blz?

Cara seguinte, as JSTL seguem o padrão de beans, ou seja, get, Set, Is…

Essas coisas. Então no método que te retorna o ArrayList você deve colocar o prefixo get seguido do nome do método.

Por exemplo:

Trecho de um jsp:


<jsp:useBean id="dao" class="br.model.DAO"/>

<c:forEach var="disciplina" items="${dao.disciplinas}">
            <div>
				<h3><a href="#">${disciplina.shortName}</a></h3>
                <div>
                    Disciplina: <strong>${disciplina.fullName}</strong><br/><br>
                    <a href="estudante.jsp?idDisc=${disciplina.codigo}">Ver estat&iacute;sticas</a>
                </div>
            </div>
</c:forEach>

Método que me retorna as disciplinas a serem listadas:

public List<Disciplina> getDisciplinas()throws SQLException{
        Database banco = new Database(Constantes.URL_BANCO);
        banco.connect();
        if(banco.isConnected()){
            String sql = "SELECT mdl_course_display.course, mdl_course.fullname, mdl_course.shortname " +
                    "FROM mdl_course_display, mdl_course "      +
                    "WHERE userid = ? " +
                    "AND mdl_course.id = mdl_course_display.course ORDER BY mdl_course.id";
            PreparedStatement stm = banco.prepare(sql);
            stm.setInt(1, this.getPessoa().getCodigo());
            ResultSet result = stm.executeQuery();
            if(result.next()){
                List<Disciplina> disciplinas = new ArrayList<Disciplina>();
                while(result.next()){
                    Disciplina disciplina = new Disciplina();
                    disciplina.setCodigo(result.getInt(1));
                    disciplina.setFullName(result.getString(2));
                    disciplina.setShortName(result.getString(3));
                    disciplinas.add(disciplina);
                }
                return disciplinas;
            }else{
                return null;
            }
        }
        return null;
    }

Repare o nome do método, ele é composto do prefixo get seguido de um nome que o descreve. Ele seria como se fosse o método get de algum atributo da minha classe, porém eu não tenho nenhum atribudo disciplinas, o que fiz foi simplesmente seguir o padrão de uma classe bean.

Espero ter ajudado

D:

Continua danto o erro.
Mas entendi o que quer dizer(ou não…). Até, quando coloquei no JSP

<jsp:useBean id="dao" class="com.br.aplicacaomvc.model.dao.LoginDAO"/>
E depois

<c:forEach items="${dao.logins}" var="Logins">
Quando coloquei o ponto, ele mostrou o método.

Mas continua dando erro.

<c:forEach items="${dao.logins}" var="Logins"> <tr> <td><c:out value="${Logins.LoginName}"/></td> //<- Aqui //<td>${Login.LoginName}</td> <- Assim também deu erro :( </tr> </c:forEach>
javax.el.PropertyNotFoundException: Property ‘LoginName’ not found on type com.br.aplicacaomvc.model.dto.LoginDTO

Se eu tiro <c:out value="${Logins.LoginName}"/> e coloco um valor fixo, ele monta a tabela com a quantidade certa.

Acho que deixei passar alguma coisa… :confused:

Valeu arkhan…

Só por curiosidade, coloquei só para mostrar a senha.

[code] <c:forEach items="${dao.logins}" var=“login”>


<c:out value="${login.password}"/>
			</c:forEach>[/code]

Advinha o que aconteceu ?
funcionou assim, só com a senha funcionou…
se eu colocar o loginname ele da páu!

pq só funciona com um ?

Você tem q colocar o nome do atributo apos a variavel q vc criou

Neste caso então deveria ficar assim:

Login.loginname

Já consegui resolver cara!

O problema, que eu vi, era a escrita.

login.password, busca o dados do método getPassword, certo?

Então a primeira letra ficou minúscula, ficando login.password.

Já o loginname, do método getLoginName, ficou login.loginName, somente com o N maiúsculo.
Pelo que mostrou ai, a primeira letra depos do get, fica minuscula, e as outras mantém como estão.

Valeu cara!

Já consegui resolver cara!

O problema, que eu vi, era a escrita.

login.password, busca o dados do método getPassword, certo?

Então a primeira letra ficou minúscula, ficando login.password.

Já o loginname, do método getLoginName, ficou login.loginName, somente com o N maiúsculo.
Pelo que mostrou ai, a primeira letra depos do get, fica minuscula, e as outras mantém como estão.

Valeu cara!