Boa noite
Galera tenho uma classe DAO e essa classe tem um método que recebe um int como parametro
public List<Contato> pesquisar(int id)
quando o chamo no codigo
<c:forEach var="contato" items="${dao.pesquisar(${param.id}) }" >
é retornado erro:
org.apache.jasper.JasperException: /testa-altera-mvc.jsp(17,3) The function pesquisar must be used with a prefix when a default namespace is not specified
org.apache.jasper.compiler.DefaultErrorHandler.jspError(DefaultErrorHandler.java:40)
org.apache.jasper.compiler.ErrorDispatcher.dispatch(ErrorDispatcher.java:407)
org.apache.jasper.compiler.ErrorDispatcher.jspError(ErrorDispatcher.java:148)
org.apache.jasper.compiler.Validator$ValidateVisitor$1FVVisitor.visit(Validator.java:1506)
...
Como faço pro método pesquisar(int id) receber um parâmetro ?
Não da pra pegar a lista antes e só jogar na pagina?
<c:forEach var="contato" items="${requestScope.lista }" >
você não repedir ${} no parametro do método
///no seu código daria erro
<c:forEach items="${seuObjeto.metodo(${param.pk})}" var="varssss">
</c:forEach>
//Forma correta
<c:forEach items="${seuObjeto.metodo(param.pk)}" var="varssss">
</c:forEach>
Editado pq esquei de fechar a tag code
Iae yoshikichi blz,
Tentei dessa forma tb não funcionou
<c:forEach var="contato" items="${dao.pesquisar(param.id }" >
o erro foi
org.apache.jasper.JasperException: /testa-altera-mvc.jsp(17,3) The function pesquisar must be used with a prefix when a default namespace is not specified
org.apache.jasper.compiler.DefaultErrorHandler.jspError(DefaultErrorHandler.java:40)
org.apache.jasper.compiler.ErrorDispatcher.dispatch(ErrorDispatcher.java:407)
org.apache.jasper.compiler.ErrorDispatcher.jspError(ErrorDispatcher.java:148)
org.apache.jasper.compiler.Validator$ValidateVisitor$1FVVisitor.visit(Validator.java:1506)
org.apache.jasper.compiler.ELNode$Function.accept(ELNode.java:129)
org.apache.jasper.compiler.ELNode$Nodes.visit(ELNode.java:200)
O que estou querendo fazer é obter um numero de ID e jogar como parâmetro no método pesquisar.
Tentei assim:
<c:forEach var="contato" items="${requestScope.lista }" >
mas onde é invocado o método pesquisar ?
Então é pq não achou o método a ser chamado.
E sobre a EL não é dessa forma, é a forma correta.
Tenho o código:
<jsp:useBean id="dao" class="br.com.caelum.jdbc.dao.ContatoDAO" />
<c:forEach var="contato" items="${dao.pesquisar(param.id)})" >
<tr>
<td><input type="text" name="nome" value="${param.id}" size="3" readonly="true" /></td>
</tr>
<tr>
<td><input type="text" name="nome" value="${contato.nome}" size="8" ></td>
</tr>
</c:forEach>
Obrigado yoshikichi,
Mas a sintaxe para listar o banco num seria dessa forma ?
Então eu quis dizer o seguinte:
Imagine que você fosse o interpretador de EL como vc iria interpretar EL dentro de EL?
Ou seja vc não pode colocar EL dentro de EL,
${objeto.metodo(${param['nome']})}
é errado isso, por exemplo
${myMap[key]} //é diferente de
${myMap['key']}
Quando o tomcat (por exemplo) for tentar fazer o parse no JSP para transformar em Servlet
o responsavel pela interpretação das EL irá achar q key em ${myMap[key]} é um atributo e tentará pegar o valor de key, como key não existe
e a EL não lança NulPointerException não acontecerá nada, agora no segundo caso que estamos passando aspa simples ele te retorna o valor daquela chave.
Entendeu.
O seu código está aperentemente certo, porém vc deve analisar algo:
<jsp:useBean id="dao" class="br.com.caelum.jdbc.dao.ContatoDAO" />
Quando utilizamos JSP:UserBean e o atributo não existir no escopo da requisição o JSP:USEBEAN irá instanciar um para vc.
E como vc não definiu o escopo o JSP:USEBEAN irá utilizar o padrão que é pagecontext, acredito que vc esteja utilizando request, então:
<jsp:useBean id="dao" class="br.com.caelum.jdbc.dao.ContatoDAO" scope="request"/>
falow
Agora só mais uma coisa, se você não estiver passando o seu DAO para a requisição que seria um erro enorme,
e sua intenção for instanciar o Dao direto na JSP mesmo, vc pode fazer um teste, abrindo o scriptlet direto e inserindo código java, para ver se vai recuperar e percorrer a lista.
falow.
e ai vc cola seu DAO aqui para o povo poder te ajudar.
Abraços