Ajuda com Expression Language

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?

&lt;c:forEach var="contato" items="${requestScope.lista }" &gt;

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