Hi guys,

I'm trying to construct a table (Tapestry 5) unsuccessfully so far, and
have been scouring the forums (Nabble) and elswhere for examples on
building a table.  So far it appears that it's only possible using a single
source (is that the only way?) either for a Loop, or Grid as demonstrated
on Jumpstart (I'm not using EJB).

The data I want to display has come from a Json object which I've
decoded/parsed and have used Jackson Tree structure to read the data and it
contains elements that I've read into Lists of either String, Integer and
Long as follows:


package com.blah.blah.blah.services;

@Entity
public class Decode implements Serializable{

private DefaultHttpClient httpClient = new DefaultHttpClient();
private final static ObjectMapper mapper = new ObjectMapper();

@Column
private List<Integer> position;
@Column
private List<String> uuid;


public void setPosition(List<Integer> positionList) {
     this.position = positionList;
}
public List<Integer> getPosition() {
     return position;
}

public List<String> getUuid(){
    return uuid;
}
public void setUuid(List<String> uuid){
     this.uuid = uuid;
}

public URL parseJson(String url){
...........
...........Http stuff here
...........
try{
.......
.......I/O stuff here
.......
       JsonNode root = fileNode.get("items");

       Iterator<JsonNode> i = root.iterator();
       while (i.hasNext()) {
                JsonNode element = i.next();
                // get the elements
                int position = element.get("position").asInt();
                String uuid = element.get("entrant").get("id").asText();
                ...................

                List<Integer> positionList = new ArrayList<Integer>();
                positionList.add(position);
                setPosition(positionList);

                List<String> uuidList = new ArrayList<String>();
                uuidList.add(uuid);
                setUuid(uuidList);
                ....................

               System.out.println("position: " + position + ", uuid" +
uuid);
       }
    }
}

I have the relevant get/set methods for the above and I have a class page
that I use to call this 'service' by way of an eventclick:

package com.blah.blah.blah.pages

public class Dostuff{

private final String staticPage = "http://localhost:10065/blah/~.page";

@Property
Decode decode = new Decode();

@SuppressWarnings("unused")
@Property
private List<Integer> position;

@SuppressWarnings("unused")
@Property
private List<String> uuid;


    /**
     * @return
     * @throws MalformedURLException
     */
    URL onReturnURLViewPage() throws MalformedURLException {
        return decode.parseJson(staticPage);
    }
}


Dostuff.tml
<html  t:type="layout" title="Test"
      xmlns="http://www.w3.org/1999/xhtml";
      xmlns:t="http://tapestry.apache.org/schema/tapestry_5_1_0.xsd";
      xmlns:p="tapestry:parameter">

<p>Welcome to Test ${userName}</p>
<p>
            [
            <a t:type="eventlink" t:event="returnURLViewPage" href="#">View
Page</a>
            ]
</p>
      <table class="grid">
        <thead>
            <tr>
                <th>Position</th>
                <th>UUID</th>
                <th>Result</th>
            </tr>
        </thead>
        <tbody>
            <tr t:type="Loop" t:source="position" t:value="decode">
                <td>position</td>
            </tr>
            <tr t:type="Loop" t:source="uuid" t:value="decode">
                <td>${uuid}</td>
            </tr>
        </tbody>
     </table><br/>

Following the examples on 'jumpstart' is really helpful but I've hit a
brick wall with this since I'm not using EJB (why such a complicated
example) and also my data from a json object is retireved as either String,
Integer or Long and so on and therefore I end up with multiple List<T>
objects which all can be sources.


Can I use these all as I've done because if I try to retireve all my data
as List<String> objects (I have tried this) then I'll get other problems
such as Coercion Exceptions or othere errors that I don't know what they
mean (I should have posted them here but it would make this post horrible
to read) but as it stands right now the System.out prints exactly what I
expect but I get no table being rendered.  I only have one head so please
can someone stop me from bashing it in any more than I have done?

Oh and just to clarify (if not already clear) my Json object can and will
possibly contain hundreds of records from which I will need to parse and
extract the same data types (String, Long, Integer etc) over and over and
although they can be read as Strings that's not what their type is.

Thanks in advance for any assistance/replies

Regards

Az

Reply via email to