Dúvida no Struts : como iterar em um array de tipo primitivo?

Olá pessoal,

eu gostaria de fazer um select com os valores de um array de tipo primitivo usando tags do Struts no jsp.

Infelizmente, a tag logic:iterate não é compatível com array de tipos primitivos - An array of Java objects (but not primitive data types such as “int”) - então eu não sei como eu poderia resolver meu problema.

Tentei fazer com um Collection de ‘int’ no meu form bean mas também não é possível iterar sobre eles, nem fazer um array de ints ( int fib[] = new int[] )

Alguém sabe algum jeito de contornar isso?
Alguma sugestão de abordagem?
Não precisa ser exatamente usando tags do struts mas ia ser bem mais fácil fazer o select pois ia ser só 2 linhas praticamente do tipo

<html:select property=“fibonatti” name=“formBean”>
<html:options collection=“fib”/>

Obrigado!

não sei se vai te ajudar mas… troque int[] por Integer[] porque esse código:

        int[] i = new int[2];
        i[0] = 10;
        i[1] = 11;

equilave

        Integer[] i = new Integer[2];
        i[0] = 10;
        i[1] = 11;

Valeus pela dica plic_ploc, eu já tinha tentado usar a classe Integer mas não deu certo. Não tem um método GetValue() ou semelhantes que seja membro dela. Vou tentar usar ela de novo aqui e posto os resultados.

Olá pessoal, consegui resolver o problema que eu havia reportado. Usei a dica dada pelo plic_ploc e complementei com alguns detalhes.

A classe Integer realmente não funciona como Bean, não há getters nem setters porém, serviu para outras utilidades.

A solução encontrada não foi do jeito ideal que eu espera encontrar, tive que fazer código no JSP.

Fiz algo parecido com isso no JSP:

            // aqui pelo menos identifica que o meu Collection não esta vazio
            <logic:notEmpty property="years" name="calendarFormBean">
                /* Aqui esta o truque! Useri a tag <jsp:useBean> e então, pude acessar a 
                   instância do meu FormBean que foi previamente definido na Classe Action.
                 */
                <jsp:useBean id="calendarFormBean" 
                                class="control.beans.calendarFormBean" scope="request"/>
                <td>
                    <%
                    // getYears() retorna um Collection cheio de Integers
                    java.util.Iterator it = calendarFormBeanormBean.getYears().iterator();
                    
                    // Cria um 'select' com os valores contidos no array de anos
                    out.println("<select name='years'>");
                    while(it.hasNext()){
                        Integer aux = (Integer)it.next();
                        out.print(" <option value='"+aux.toString() +"1>" );
                        out.println(aux.toString() +"</option>");
                    }
                    out.println("</select>");
                    %>
                </td>
            </logic:notEmpty>

Porém, agora estou com outro problema: não consigo utilizar a referência para o calendarFormBean em outro trecho de código jsp, entre <% %> distintos, da erro dizendo que não foi possível encontrar a variável. Para piorar, quando uso a tag <jsp:useBean id=“calendarFormBean” class=“control.beans.calendarFormBean” scope=“request”/> em outro ponto do JSP, da erro dizendo que o ‘name’ já esta sendo utilizado e se eu der outro id, algo como ‘calendarFormBean2’ não acha a intância de ‘calendarFormBean’.

Alguém sabe resolver este outro problema? Como acessar uma variável em diferentes porções de códigos JSP, trechos de <% %> distintos?

Valeus!

Olá pessoal,

consegui resolver o meu problema de variáveis compartilhadas no JSP.
Na verdade, é uma dúvida bem básica pra quem não ta acostumado a programar no JSP.

Para declarar uma variável que seja visível no escopo da classe, ela deve estar entre tags <%! %> , iniciados com o ponto de exclamação. Isso faz com que no .class gerado da compilação do JSP, as variáveis ficarão definidos no escopo da classe e não no método.

Essa foi fácil.

Descobri também que as tags alteram o escopo. Não tive a oportunidade de verificar como que estas tags são compiladas mas pelo jeito deve ter um try-catch circundando elas.

A solução final ficou:

                 /* Aqui esta o truque! Useri a tag <jsp:useBean> e então, pude acessar a 
                    instância do meu FormBean que foi previamente definido na Classe Action.
                    Não precisa/devo usar a tag <logc:notEmpty>
                  */
                 <jsp:useBean id="calendarFormBean" 
                                 class="control.beans.calendarFormBean" scope="request"/>
                 <%!
                      // Variáveis globais da classe
                      java.util.Iterator it = null;
                  %>
                 <td>
                     <%
                     // getYears() retorna um Collection cheio de Integers
                    it = calendarFormBeanormBean.getYears().iterator();
                     
                     // Cria um 'select' com os valores contidos no array de anos
                     out.println("<select name='years'>");
                     while(it.hasNext()){
                         Integer aux = (Integer)it.next();
                         out.print(" <option value='"+aux.toString() +"1>" );
                         out.println(aux.toString() +"</option>");
                     }
                     out.println("</select>");
                     %>
                 </td>

Espero que este tópico resolva algumas dúvidas que a comunidade possa ter. Fico devendo o código compilado do JSP para mostrar o escopo das variáveis.

Até mais!