more note at develop time, using Spindle, you'll have all
components and all component definitions available and Spindle will be
happy. At runtime, not only will you only include the Customer specific
page, but also the customer specific components; Tapestry will be
"happy" because it will never reference a page which contains unknown
components.
(Although, if you're using tap3 and you're using folder hierarchies for
your components, you'll have to make sure that your .application doesn't
reference other-customer components).
Robert
Robert Zeigler wrote:
>A few conditions make this not a trivial task, it seems: We cannot use @Block
>and @RenderBlock, because the components for versions of other customers shall
>not be contained in the deployment (at worst they could contain corporate
>secrets).
>>
Why not @Block/@RenderBlock? In fact, these seem ideal for your
situation. So, you're grabbing the right component instance based on
the current customer, right? And some of these customer-specific
components have sensitive information, and so they shouldn't be
distributed to all customers, right? No sweat. :)
Define -
A page per customer
Define -
The customer specific components in blocks within the customer specific
page
Distribute -
The application pages + the Customer's component page.
Now, when you need to grab that component, you do something like the
following:
.html:
<div jwcid="@RenderBlock" block="ognl:customerBlock"/>
<div jwcid="DefaultBLock@Block"></div>
.java:
public IComponent getCustomerBlock() {
/*I'm assuming you're using tap 4 and the customer object is injected*/
Customer c = getCustomer();
IPage p = getRequestCycle().getPage(c.getCustomerPageName()) ;
IComponent block = p.getComponent("BlockName or lookup here");
if (block == null) {
return getPage().getComponent("DefaultBlock");
}
}
Something like that. The point is, RenderBlock doesn't care where the
Block is coming from; it doesn't /have/ to be on the same page. This
allows you to isolate customer-specific blocks on a page for that
customer, and then only distribute the appropriate customer-specific
page. So I ask again: why not Block/RenderBlock? :)
Robert
To unsubscribe, e-mail: users-unsubscribe (AT) tapestry (DOT) apache.org
For additional commands, e-mail: users-help (AT) tapestry (DOT) apache.org
To unsubscribe, e-mail: users-unsubscribe (AT) tapestry (DOT) apache.org
For additional commands, e-mail: users-help (AT) tapestry (DOT) apache.org