Webwork - iterator

zzzzzzzz… (virei a noite…)
:arrow: Pessoal estou apanhando para fazer uma totalização no Webwork.
:arrow: já apanhei para colocar os valores no grid, agora não consigo fazer totalizar de jeito nenhum.
Se alguem por ai puder me dar uma ajuda de me quebra uma arvore inteira.

Estou com um objeto List onde guardei todos os valores.
:oops: Já tentei de tudo e não consiguo fazer uma totalização, dá pra acreditar :!: :!:

Valeu galera.
Um abraço.

Ponha um getTotalValores() na sua Action, que calcula o valor que vc quer… bem mais facil, e organizado :wink:

Se eu entendi bem, vc só precisa iterar sobre a List e somar tudo, right?

Kra entendi, sei que é folga demais, mas kra procurei na Net a madrugada toda e não achei ninguem que totalize com o webwork, no exemplo do i18n só tem uma totalização, mas sinceramente não consegui entender direito (deve ser pq estou trabalhando ha 28hs :frowning: ).

Alguém por ai, (CV), não teria por ai um exemplo de totalização: principalmente como é feita a chamada do metodo dentro do iterator.

kra, o webwork é muito bom mas é muito fraco de documentação. É que eu sou muito teimoso.

Pode ser só um trechinho, qualquer exemplo por menor que seja já vai me dar uma idéia de como vai funcionar.

:arrow: :arrow: :arrow: :arrow:

:?: Um outra pergunta, sempre que eu preciso retornar recordset para o WW, eu preciso criar uma classe com todos os campos da tabela?

Existe alguma ferramenta que eu passe a query e ele já monte a classe?

:arrow: :arrow: :arrow: :arrow:

:?: No caso da totalização, não tem como eu criar uma variável no WW, incrementar e exibir depois?

Valeu a ajuda pessoal, acho que vou pra casa dormir agora!!

eu alterei um filtro que encontrei na net para poder utilizar o WW junto com JSTL, se quiser posso postar aqui no GUJ ele, ai tu pode utilizar as tags da JSTL para fazer isto :slight_smile:

e ainda tem a vantagem de que uma vez utilizando JSTL não precisa aprender mais uma TAGLIB para fazer a mesma coisa :slight_smile:

e pode também utilizar todos os recursos da JSTL 1.1, incluindo os validators :slight_smile:

Mas dai vc perde a OGNL e a value stack, nao urubatan?

Kra, to aceitando tudo que for para facilitar.

Estou fazendo um projeto de laboratório aki na empresa e vou ser sicero, o WW é muito bom, mas tenho situações que tenho relatórios com 60 campos retornados de tabelas e uns 20 calculados, e vc imagina fazer um relatório destes por dia, criar uma classe com 160 metodos, 80 variávei para exibir um relatório.

:idea: Realmente deve ter algum jeito mais fácil.

:?: Por acaso o velocity ajuda mais ou dá mais ou menos no mesmo?

Pode mandar sim. Sem problemas.
valeu galera

Eu definitivamente tentaria o Velocity se fosse vc :smiley:

Pra fazer isso que vc quer no Velocity:

#set($total = 0) #foreach($registro in $registros) <tr> <td>$registro.id</td> <td>$registro.valor</td> ... </tr> #set($total = $total + $registro.valor) #end Total: $total

Baba, não? :smiley:

Ah, esqueci de perguntar, mas me parece que vc tá usando WW1.x né?

bom, eu to usando o WW1.x, mas este filtro deve funcionar com o 2.x também :slight_smile:

não se perde o ValueStack utilizando ele, tudo o que esta no value stack, fica disponivel como um attribute do request, que só é “puxado” do VS quando vai ser utilizado :slight_smile:

ja OGNL eu não sei o que é :frowning:

o que é isto??

aqui as duas classes estão na package br.com.usiinformatica.webwork.wrapper

tu pode alterar ai,
tem um esquema no codigo (um flag para chinelear um pouco) que faz o filtro rodar só uma vez, caso contrario, ele seria executado a cada dispatch :slight_smile:

bom, segue o filtro e o RequestWraper que uso:

JSTLFilter

[code]package br.com.usiinformatica.webwork.wrapper;

import java.io.IOException;

import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;

/**

  • @web.filter name = "JSTLFilter" description = "Filtro para permitir trabalhar com WebWork e JSTL ao mesmo tempo"
  • @web.filter-mapping url-pattern = "*.jsp"
  • @web.filter-mapping url-pattern = "*.action"
  • @author Rodrigo
  • To change the template for this generated type comment go to
  • Window - Preferences - Java - Code Generation - Code and Comments
    */
    public class JSTLFilter implements javax.servlet.Filter {
    private static final String RUNONCE_REQUEST_ATTRIBUTE = "_run_once" + JSTLFilter.class.getName();
    private static final Object RUNONCE_REQUEST_VALUE = new Object();
    FilterConfig _filterConfig;
    public FilterConfig getFilterConfig() {
    return _filterConfig;
    }
    public void setFilterConfig(FilterConfig filterConfig) { _filterConfig = filterConfig;
    }
    public void init(FilterConfig filterConfig) throws ServletException {
    }
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
    Object attribute = request.getAttribute(RUNONCE_REQUEST_ATTRIBUTE);
    // Make sure it is an HttpServletRequest, if so, create the wrapper and pass it on
    if (attribute == null && request instanceof HttpServletRequest) {
    ServletRequest wrappedRequest = new JSTLRequestWrapper((HttpServletRequest) request);
    chain.doFilter(wrappedRequest, response);
    request.setAttribute(RUNONCE_REQUEST_ATTRIBUTE, RUNONCE_REQUEST_VALUE);
    } else {
    // Otherwise, just pass the request on down the chain
    chain.doFilter(request, response);
    }
    }
    public void destroy() {
    }
    }
    [/code]

RequestWrapper

[code]package br.com.usiinformatica.webwork.wrapper;

import javax.servlet.ServletRequest;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;

import webwork.util.ServletValueStack;
import webwork.util.ValueStack;

public class JSTLRequestWrapper extends HttpServletRequestWrapper {
private ServletRequest wrappedRequest;
public JSTLRequestWrapper(HttpServletRequest request) {
super(request);
wrappedRequest = request;
}
public Object getAttribute(String s) {
Object attribute = super.getAttribute(s);
if (attribute == null) {
// If not found, then try the ValueStack
ValueStack stack = ServletValueStack.getStack(wrappedRequest);
if (stack != null) {
attribute = stack.findValue(s);
}
}
return attribute;
}
}
[/code]

depois coloca algo mais ou menos assim no web.xml

[code] <filter>
<filter-name>JSTLFilter</filter-name>
<description><![CDATA[Filtro para permitir trabalhar com WebWork e JSTL ao mesmo tempo]]></description>
<filter-class>br.com.usiinformatica.webwork.wrapper.JSTLFilter</filter-class>
</filter>

<filter-mapping>
<filter-name>JSTLFilter</filter-name>
<url-pattern>.jsp</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>JSTLFilter</filter-name>
<url-pattern>
.action</url-pattern>
</filter-mapping>
[/code]

Nem precisa - no WW2 ja tem suporte a JSTL embutido :wink: