If you use that Columns component you'll also need some CSS: DIV.t-column { float: left; padding: 1em; }
Or, you can use a different CSS class name (other than t-column) by passing the class name as a component parameter: <t:columns number="3" columnClass="foo"> <t:loop source="items" value="item"> <div>${item.name}</div> </t:loop> </t:columns> On Wed, Jan 29, 2014 at 4:57 PM, Bob Harner <bobhar...@gmail.com> wrote: > Maybe this handy little component will help: > > /** > * A Tapestry component that rearranges the HTML items in its body into > multiple > * columns. It accomplishes this by DOM manipulation after the body is > rendered > * to the DOM. > * <p> > * Note: For this to work properly, the items that you wrap this component > * around must each consist of a single HTML element (possibly with nested > * elements). For example, the following works, because each item is contained > * within a single <li> element: > * > * <pre> > * <t:columns number="2"> > * <t:loop source="myList" value="oneItem"> > * <li><b>Name:</b>{$oneItem.name}</li> > * </t:loop> > * </t:columns> > * </pre> > * > * But the following fails to lay out property, because there are two HTML > * elements -- a span and a br -- per item: > * > * <pre> > * <t:columns number="2"> > * <t:loop source="myList" value="oneItem"> > * <span>${oneItem.name}</span><br /> > * </t:loop> > * </t:columns> > * </pre> > */ > @SupportsInformalParameters > public class Columns { > /** > * The number of columns to divide the items into > */ > @Property > @Parameter(value="5", defaultPrefix="literal") > private int number; > > @Property > @Parameter(value="literal:t-column") > private String columnClass; > > @Inject > private ComponentResources componentResources; > > /** > * Manipulate the Tapestry-rendered DOM to insert as many DIV elements as > * needed to break up the list of items in our "body" into the requested > * number of columns. This method is only called after the "body" is > * rendered into the DOM. > * > * @param writer > */ > @AfterRenderBody > void manipulateTheDom(MarkupWriter writer) > { > Element container = writer.getElement(); > > // figure out how many items should go into each column > > List<Node> children = container.getChildren(); > int numChildren = children.size(); > int itemsPerColumn = numChildren / number; > int remainder = numChildren % number; > int itemNum = 0; > > // render informal parameters into the container element > componentResources.renderInformalParameters(writer); > > for (int columnNumber = 0; columnNumber < number; columnNumber++) > { > int extras = (remainder > 0) ? 1 : 0; > remainder--; > int numItemsthisColumn = itemsPerColumn + extras; > > // Make a per-column wrapper element and move it to the bottom > Element columnElement = container.element("div", "class", > columnClass); > columnElement.moveToBottom(container); > > // move some children into the new column wrapper element > for (int i = 0; i < numItemsthisColumn; i++) > { > children.get(itemNum).moveToBottom(columnElement); > itemNum++; > } > } > } > } > > On Wed, Jan 29, 2014 at 3:28 PM, Thiago H de Paula Figueiredo > <thiag...@gmail.com> wrote: >> On Wed, 29 Jan 2014 17:58:08 -0200, Dimitris Zenios >> <dimitris.zen...@gmail.com> wrote: >> >>> I am not sure whether i will be able to cast to collection.Maybe tapestry >>> is doing some magic with BindParameter. >> >> >> You don't need to cast it to a Collection, because Iterable is exactly the >> Java interface implemented by any class which provides an Iterator. Just use >> Iterable and its iterator() method directly. >> >> >> -- >> Thiago H. de Paula Figueiredo >> Tapestry, Java and Hibernate consultant and developer >> http://machina.com.br >> >> --------------------------------------------------------------------- >> To unsubscribe, e-mail: dev-unsubscr...@tapestry.apache.org >> For additional commands, e-mail: dev-h...@tapestry.apache.org >> --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tapestry.apache.org For additional commands, e-mail: dev-h...@tapestry.apache.org