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!