Problemas com JSTL e Spression language

Olá pessoal, sou novo no forum, estou começando a estudar Java
tive um problema, se alguem puder me ajudar:

Estou desenvolvendo uma aplicação para web em java usando struts e tive um problema para exibir meus dados usando JSTL e Spression Language

pagina de listagem:

   1. <%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%>  
   2. <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>  
   3.   
   4. <html>  
   5. <head>  
   6. <title>teste</title>  
   7. </head>  
   8. <body>  
   9.   
  10. <c:forEach var="lista" items="${listaClientes}">  
  11.     ${lista.nome}<br />  
  12. </c:forEach>  
  13.   
  14. </body>  
  15. </html>  

struts-config.xml

<action path="/teste" type="com.struts.action.ClientesAction" scope="request" >  
     <forward name="OK" path="/WEB-INF/web/clientes/Cadastro.jsp"  />  
</action> 

ClientesAction.java

 public ActionForward execute(ActionMapping map, ActionForm form, HttpServletRequest request,HttpServletResponse response) throws Exception {  
    List list = new ArrayList();  
   
    Clientes c =  new Clientes();  
    c.setNome("rafael");  
    list.add(c);  
   
    c =  new Clientes();  
    c.setNome("abc");  
    list.add(c);  
   
    request.setAttribute("listaClientes", list );  
      
    return map.findForward("OK");  
 } 

Ele não da nenhum erro na página, mais não execura o for para escrever minha lista, ele não interpleta o spression language, ele escreve na página ${lista.nome}, eu fiz uns testes com jstl sem spression language só para testar e esta funcionando, estou achando que pode ser algum jar que esteja faltando ou coisa do tipo

Agradeço des de já

Você colocou o arquivo jstl.jar dentro da pasta WEb-INF/lib do seu pacote?

A versão do seu web.xml é 2.4?

Sim, coloquei os jars jstl.jar e standard.jar em WEb-INF/lib

A versão do meu web.xml é a 1.0
O projeto foi desenvolvido a partir do struts-blank 1.3.8

Há algum problema de compatibilidade será??
Estou usando o tomcat 5.0, java 5, struts 1 com todos jars

cara, estou tendo um problema idêntico ao seu!! veja:

No JSP está assim:


 <c:forEach var="livro" items="${livros}" > 
           <p>${livro.getTitulo}/> </p>                      
 </c:forEach>                             

na minha action que popula o objeto livros está assim:

[code]

public class Busca extends BaseAction {

  public String execute() throws Exception {

    String titulo = input.getStringValue("texto");

    Connection conn = (Connection) input.getValue("connection");
    
    AcessaBanco ab = new AcessaBanco();
    
    List<Book> livros = ab.procuraLivros(titulo,conn);       
    output.setValue("livros",livros);
      
return SUCCESS;
 }

} [/code]

e a classe que acessa o Banco está assim:


public class AcessaBanco {
    
   
    public AcessaBanco() {
    }
               
        
    public List procuraLivros(String titulo, Connection conn) throws Exception {
        Statement stmt = null;
        ResultSet rset = null;
        try {
            
            String sb = null;
          
            sb = "select * from produto where ";                                
            sb = sb + " descricao starting with 'AMOR'" ;
            sb = sb + " order by descricao";
                           
            stmt = conn.createStatement();
            rset = stmt.executeQuery(sb);
            
            List books = new ArrayList();
       
            while (rset.next()) {
                Book book = new Book();
                book.setId(rset.getInt("cp_produto"));
                book.setTitulo(rset.getString("descricao"));
                book.setAutor(rset.getString("desc_res"));
                book.setPreco(rset.getDouble("preco_venda"));
                book.setPromocao(rset.getDouble("preco_custo"));
                
                books.add(book);               
            }               
            return books; 
                             
        } finally {
            if (rset != null) try { rset.close(); } catch(Exception e) { }
            if (stmt != null) try { stmt.close(); } catch(Exception e) { }
        }   
   }
}

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" version="2.4"> 

    <servlet>
        <servlet-name>Controller</servlet-name>
        <servlet-class>org.mentawai.core.Controller</servlet-class>       
        <init-param>
           <param-name>applicationManager</param-name>
           <param-value>bookshop.ApplicationManager</param-value>
        </init-param> 
        <load-on-startup>1</load-on-startup>		
     </servlet>
 
     <servlet-mapping>
        <servlet-name>Controller</servlet-name>
        <url-pattern>*.mtw</url-pattern>
     </servlet-mapping>
        
    
    
    <filter>
        <filter-name>DebugFilter</filter-name>
        <filter-class>
            org.mentawai.util.DebugServletFilter
        </filter-class>
    </filter>
    
    <filter-mapping>
        <filter-name>DebugFilter</filter-name>
        <url-pattern>*.jsp</url-pattern>
        <dispatcher>REQUEST</dispatcher>
        <dispatcher>FORWARD</dispatcher>
        <dispatcher>INCLUDE</dispatcher>
        <dispatcher>ERROR</dispatcher>
    </filter-mapping>



    <session-config>
        <session-timeout>
            5
        </session-timeout>
    </session-config>

    <error-page>
          <error-code>403</error-code>
          <location>/erros/403.html</location>
    </error-page>

    <error-page>
          <error-code>404</error-code>
          <location>/erros/404.html</location>
    </error-page>

    <welcome-file-list>
      	<welcome-file>
            index.jsp
        </welcome-file>
    </welcome-file-list>


<!--
    <resource-ref>
        <description>Firebird Datasource </description>
        <res-ref-name>jdbc/firebird</res-ref-name>
        <res-type>javax.sql.DataSource</res-type>
        <res-auth>Container</res-auth>
    </resource-ref> -->
    
    <taglib>
        <taglib-uri>http://java.sun.com/jsp/jstl/core</taglib-uri>
        <taglib-location>/WEB-INF/c.tld</taglib-location>
    </taglib> 
       
    <taglib>
        <taglib-uri>http://java.sun.com/jsp/jstl/fmt</taglib-uri>
        <taglib-location>/WEB-INF/fmt.tld</taglib-location>
    </taglib>
    
    <taglib>
       <taglib-uri>http://java.sun.com/jsp/jstl/sql</taglib-uri>
       <taglib-location>/WEB-INF/sql.tld</taglib-location>
    </taglib>
    
    <taglib>
       <taglib-uri>http://java.sun.com/jsp/jstl/x</taglib-uri>
       <taglib-location>/WEB-INF/x.tld</taglib-location>
    </taglib>
    
       
    <jsp-config>
        <jsp-property-group>
            <url-pattern>*.jsp</url-pattern>
            <el-ignored>false</el-ignored>
        </jsp-property-group>
    </jsp-config>    
        

</web-app>

e quando a action acima é acionada ele me dá o erro 404. Seu eu não popular o objeto livros ele não dá o erro 404(Página não encontrada)

Estou usando:

Tomcat 5.5.17 embutido no Netbeans 5.5
Java 5
os jar da JSTL (standard.jar e jstl.jar) estão em /WEB-INF/lib

alguem tem alguma idéia???

Acho que você nem sabia o que era Java quando o web.xml estava na versão 1.0, mostre o seu web.xml aí.

[quote=hubner]cara, estou tendo um problema idêntico ao seu!! veja:

No JSP está assim:


 <c:forEach var="livro" items="${livros}" > 
           <p>${livro.getTitulo}/> </p>                      
 </c:forEach>                             

na minha action que popula o objeto livros está assim:

[code]

Tomcat 5.5.17 embutido no Netbeans 5.5
Java 5
os jar da JSTL (standard.jar e jstl.jar) estão em /WEB-INF/lib

alguem tem alguma idéia???

[/quote]

Nâo é mais necessário declarar as taglibs que você está usando quando o seu web.xml for da versão 2.4 ou superior.

Acho que você nem sabia o que era Java quando o web.xml estava na versão 1.0, mostre o seu web.xml aí.[/quote]

<?xml version="1.0" encoding="ISO-8859-1"?>

  <!DOCTYPE web-app PUBLIC
	"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
	"http://java.sun.com/dtd/web-app_2_3.dtd">

<web-app>
  <display-name>Struts Blank Application</display-name>
  
  <!-- Standard Action Servlet Configuration -->
  <servlet>
    <servlet-name>action</servlet-name>
    <servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
    <init-param>
      <param-name>config</param-name>
      <param-value>/WEB-INF/struts-config.xml</param-value>
    </init-param>
    <load-on-startup>2</load-on-startup>
 </servlet>


  <!-- Standard Action Servlet Mapping -->
  <servlet-mapping>
    <servlet-name>action</servlet-name>
    <url-pattern>*.do</url-pattern>
  </servlet-mapping>


  <!-- The Usual Welcome File List -->
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>

</web-app>

Amigos,

Ao invés de usar: ${lista.nome}, tentem usar:
<c:out value="${lista.nome}">

se não exibir nada provavelmente não está sendo enviado nada pra página, faz um teste antes do foreach, tente com um present pra verificar se sua página recebeu a lista e se recebeu, dentro do foreach coloque alguma funçãozinha pra imprimir a data ou qualquer outro valor só para você ter noção de quantos elementos tem na lista, mas acredito que o c:out resolva o problema.

[]'s

Aiiii pessoal, valeu pela ajuda de todos mais eu resolvi o problema
e também descobri que se escreve “Expression language” rsrs

eu achei o msm problema em outro forum http://www.guj.com.br/posts/list/27092.java

No meu caso foi só incluir a tag <%@ page isELIgnored="false" %>

que habilitou a interpletação de Expression language na minha página

o problema é ficar colocando essa tag em todas as páginas, se alguem conhecer alguma outra forma de habilitar EL me falem

Valeu…

coloca essa tag no seu web.xml se funcionar posta aqui o resultado!

<jsp-config>
    <jsp-property-group>
        <url-pattern>*.jsp</url-pattern>
        <el-ignored>false</el-ignored>
    </jsp-property-group>
</jsp-config> 

Hübner (ETI)

[quote=hubner]
coloca essa tag no seu web.xml se funcionar posta aqui o resultado!

<jsp-config>
    <jsp-property-group>
        <url-pattern>*.jsp</url-pattern>
        <el-ignored>false</el-ignored>
    </jsp-property-group>
</jsp-config> 

Hübner (ETI)[/quote]

Valeu msm mais aqui em casa não funcionou

Então… :?

Fiz uma besteira muito grande neh…

a intenção é justamente não usar <c:out> xD, ê pressa viu… desculpa pessoal!

: :wink: