It works with JXpath expressions :

With this, I get What I need :
#{account/payer/lines[5]/CL1data/CL1_NUMLIG} 

BUT

I need the number 5 to be replaced with the value of 
account.payer.lines.currentLineIndex
So I thought of putting this value inside a variable using jx:set :



This works
<jx:set var="lineIndex" value="${account.payer.lines.currentLineIndex}"/>
var :${lineIndex} <br/>
                        
But this doesn't work : 
<jx:set var="lineIndex" value="#{account/payer/lines/currentLineIndex}"/>
var :#{$lineIndex} <br/>


I then need to do something like that :
<jx:set var="line" value="#{account/payer/lines[$lineIndex + 1]}"/>

So that I can get #{$line/CL1data/CL1_NUMLIG} or #{$line/CL1data/CL1_PRODUI}

But I'm stuck again...

To answer your question, I'm using javascript Objects, and javascript Arrays. I 
took the petsotre block as an inspiration to build my webapp. Everything is in 
flowscript ... I use this code to instanciate account.payer :

account = new Object();
account.payer = new Payer();

function Payer(codcli,codpay) {
        this.data = null;
        this.lines = null;
}

And to fill the array of lines, I use the javascript push() function like this :

account.payer.fetchLines();

Payer.prototype.fetchLines = function () {
        this.lines = [];
        var line = null;
        try {
                var conn = Database.getConnection("gptodb");
                var resultCL1 = conn.query("select * from CL1 where CL1_CODCLI 
= ? and CL1_PAYEUR = ?", [this.data.CP1_CODCLI,this.data.CP1_PAYEUR]);
        
        for (var i in resultCL1.rows) {
                line = new Line();
                line.CL1data = resultCL1.rows[i];
                line.fetchLITdata();
                this.lines.push(line);
        }
        
        conn.close();
        
    } catch(e) {
        }
}




Philippe

-----Message d'origine-----
De : Jason Johnston [mailto:[EMAIL PROTECTED] 
Envoyé : samedi 1 avril 2006 04:15
À : users@cocoon.apache.org
Objet : Re: jx template and arrays ... I need help

Philippe LAPLANCHE wrote:
> In my JXTemplate, this expression returns nothing: 
> 
> ${account.payer.lines[5].CL1data.CL1_NUMLIG}
> 
> But in my flow, just before I call the sendPage() function, this
> expression gives an int (I checked with the debugger)
> 
> My object seems to be correctly passed and the arrays of lines is really
> there. Here's how I know :
> 
> <jx:forEach var="line" varStatus="status" items="${account.payer.lines}"
>       ${line.CL1data.CL1_NUMLIG} <br/>
> </jx:forEach>
> 
> This returns a list with all the data I need.
> 
> Can someone understand what is happening here?
> 
> I'm using Cocoon 2.1.8 under win XP with Tomcat 5.5 and SUN JDK 1.5

When you say "array"... what exactly is the lines object?  A true Java
Array?  A JavaScript array you created in flowscript?  Something else?

In my experience JXPath expressions are more flexible in the kinds of
objects they know how to traverse, compared to Jexl expressions.  Try:
#{account/payer/lines[6]/CL1data/CL1_NUMLIG} and see if it has any
better luck.  Keep in mind [n] indexes in XPath are 1-based.

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

---------------------------------------------------------------------------------------
Wanadoo vous informe que cet  e-mail a ete controle par l'anti-virus mail. 
Aucun virus connu a ce jour par nos services n'a ete detecte.







---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to