I quickly solved it with some kind of hack for those interested, but I'm still curious if the kind of binding I described is possible at all.
Cheers, Geert-Jan A hack that's working: introduced 2 extra fields: facetmaxInc and FacetOld; public void setFacetCounter(int facetCounter) { this.facetCounter = facetCounter; if(facet!=null && facet.equals(facetold)) { facetMaxInc = facetMax; facetold = facet; } if(facet!=null && facet.getFacet().isSelected()) { facetMaxInc++; } } and check on facetMaxInc. Britske wrote: > > I need a bit of introduction to lay down the problem, so please bare with > me: > > I have a component which renders lists of items. A parameter > (childcounter) keeps track of the number of rendered items in the current > List. > > I have the requirement. to be able to define on a per-page basis how many > items are rendered at max. I implemented this by simply binding > childcounter param and checking it against a field (say: maxitems) on the > page. Depending on that I can decide on a per-page basis what to do with > items that exceed the maxitems-threshold. (render different blocks, etc) > So far so good. > > Currenly Im using this component to render facets > (http://en.wikipedia.org/wiki/Faceted_classification) as part of a > navigation menu. The requirement is to (for each list) render all SELECTED > facets first and then render x (say 5) UNSELECTED facets per list, where x > is defined by maxitems. > > The problem: > the component doesn't know (and shouldnt know) that it is rendering > facets. So it doens't know if a facet is selected or unselected. Based on > that the childcounter is incremented each time a selected or unselected > facet is rendered, and the maxitem-treshold is reached when 5 facets per > group are rendered (independent whether they are selected or unselected). > Obviously thats not what I want. > > The solution (so I thought) > 1. The component doens't know that it's rendering facets, but the page > knows. Moreover, the component outputs the item that it is currently > rendering. (the facet in this case). > 2. the param childcounter of the component is bound to the page field > 'facetCounter' > > since as I understand it a param-binding is bi-directional I did the > following: > > Page: > -------------------------- > @Component(parameters = {"result=facetdsText", > "row=gGroup","childrow=facet","ulClass=literal:facets", > "childcounter=facetcounter"}) > private CompositeFlexLi facetBlock; > > public void setFacetCounter(int facetCounter) > { > if(facet==null || !facet.getFacet().isSelected()) > { > this.facetCounter = facetCounter; > } > } > > What it does is obvious: > 1. the component renders and updates childcounter, which in effect calls > setFacetCounter(int facetCounter), since its bound to facetCounter. > 2. facetCounter is only updated when the current item is a UNSELECTED > facet (which it knows in contrast to the component) > > The actual problem now is that facetCounter indeed is only updated when a > facet is unselected, but the parameter 'childcounter' is still updated, > although it is bound to the field facetCounter which is not updated (they > aren't in sync). > The behavior now is the following: (say i have 2 selected facets) > childcounter: 1,2,3,4,5 > facetfield: 0,0,3,4,5 > > while i figured it would be: > childcounter: 0,0,1,2,3,4,5 > facetfield: 0,0,1,2,3,4,5 > > Was I expecting to much 'binding-magic' to happen here, or am I missing > something? > If not, what would be your suggestion to tackle this issue? (making the > component aware that its rendering facets is as I explained no option) > > Thanks in advance, > Geert-Jan > > > -- View this message in context: http://www.nabble.com/T5%3A-%22conditional-parameter-binding%22-or-something-tf4944458.html#a14155609 Sent from the Tapestry - User mailing list archive at Nabble.com. --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]