You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@struts.apache.org by Bent André Solheim <be...@gmail.com> on 2004/10/18 16:16:54 UTC

The "one Action multiple jsps/tiles"-problem with a twist.

Hi Struts users,

I am developing a web based reporting system using Struts, and one
requirement is that each customer can have their own tailored version
of the reports.

I use tiles to define each report page for each customer, and for each
page for each customer I define a <forward> element in the
<global-forwards>. In the Actions, I look up what Customer is
performing the Action and return the approprate ActionForward. This
works just fine functionally, but it is turning into a maintenance
issue.

In struts-config.xml, I have a <forward> element for each customer for
each report page where the name and path is prefixed with a
CustomerId;

...
<forward name="customer1id.summary" path="customer1id.summary" ... />
<forward name="customer2id.summary" path="customer2id.summary" ... />
<forward name="customer3id.summary" path="customer3id.summary" ... />
<forward name="customer1id.overview" path="customer1id.overview" ... />
<forward name="customer2id.overview" path="customer2id.overview" ... />
...

where the path is tiles definition names. I realise that I must have a
unique path for each report page for each Customer, but ideally I
would not declare these in struts-config.xml, and in my Actions, I
would not look up the Customer performing the Action, but just return
a Customer ignorant forward;

in my Action:
...
return mapping.findForward("summary");

in struts-config.xml
<forward name="summary" path="summary" ... />

and then plug in some kind of mechanism to the struts framework that
was able to determine the forward path for the current Customer for
the given forward name.

This would save me a lot of typing in the struts-config.xml and would
clean up my Action classes of the necessary customer aware forward
lookup.

Am I making any sense here? Have anybody had similary issues and found
a decent solution that they would like to share? Is the solution I
described possible to implement easily?

Best Regards
Bent André

---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
For additional commands, e-mail: user-help@struts.apache.org


Re: The "one Action multiple jsps/tiles"-problem with a twist.

Posted by Bent André Solheim <be...@gmail.com>.
Thank you, Jeff, for the detailed explanation - it was exactly what I
was looking for! This puts me on track to reduce code complexity and
increase maintainability quite a bit. The custom RequestProcessor did
the trick.

Thanks again!

Best Regards,
Bent.


On Mon, 18 Oct 2004 11:01:25 -0400, Jeff Beal <jb...@webmedx.com> wrote:
> The first thing to remember is that a Forward is just a Java object.
> You can create them and manipulate them in any way that you want.
> 
> For instance, in our application we didn't want the users to use the
> "Back" button on their browser.  We hid the toolbar, disabled the
> necessary shortcuts, and wrote our own server-side mechanism.  From a
> Struts standpoint, this means that what happens when you hit the "Back"
> button (on the web page) is completely dynamic.  There was no way to use
> static forwards defined in the struts-config file to implement that
> functionality.
> 
> What I did to implement the navigation aspects of this was to create
> custom ActionMapping and RequestProcessor classes.  The findForward
> method in my custom ActionMapping will create a new instance of an
> ActionForward (without a path attribute) when the back button is
> pressed.  (I use a static String attribute in ActionMapping as the name
> of the forward.)  When the RequestProcessor sees one of these forwards,
> it accesses the session history and sets the path attribute on the
> ActionForward prior to processing it.
> 
> In your case, you could do something similar by creating two
> "pre-defined" forwards in a custom ActionMapping: CustomerSummary and
> CustomerOverview.  In your request processor, just detect when a forward
> has one of these two names and access the customer information to
> manipulate the path attribute.
> 
> Just one possibility
> 
> -- Jeff
> 
> 
> 
> Bent André Solheim wrote:
> > Hi Struts users,
> >
> > I am developing a web based reporting system using Struts, and one
> > requirement is that each customer can have their own tailored version
> > of the reports.
> >
> > I use tiles to define each report page for each customer, and for each
> > page for each customer I define a <forward> element in the
> > <global-forwards>. In the Actions, I look up what Customer is
> > performing the Action and return the approprate ActionForward. This
> > works just fine functionally, but it is turning into a maintenance
> > issue.
> >
> > In struts-config.xml, I have a <forward> element for each customer for
> > each report page where the name and path is prefixed with a
> > CustomerId;
> >
> > ...
> > <forward name="customer1id.summary" path="customer1id.summary" ... />
> > <forward name="customer2id.summary" path="customer2id.summary" ... />
> > <forward name="customer3id.summary" path="customer3id.summary" ... />
> > <forward name="customer1id.overview" path="customer1id.overview" ... />
> > <forward name="customer2id.overview" path="customer2id.overview" ... />
> > ...
> >
> > where the path is tiles definition names. I realise that I must have a
> > unique path for each report page for each Customer, but ideally I
> > would not declare these in struts-config.xml, and in my Actions, I
> > would not look up the Customer performing the Action, but just return
> > a Customer ignorant forward;
> >
> > in my Action:
> > ...
> > return mapping.findForward("summary");
> >
> > in struts-config.xml
> > <forward name="summary" path="summary" ... />
> >
> > and then plug in some kind of mechanism to the struts framework that
> > was able to determine the forward path for the current Customer for
> > the given forward name.
> >
> > This would save me a lot of typing in the struts-config.xml and would
> > clean up my Action classes of the necessary customer aware forward
> > lookup.
> >
> > Am I making any sense here? Have anybody had similary issues and found
> > a decent solution that they would like to share? Is the solution I
> > described possible to implement easily?
> >
> > Best Regards
> > Bent André
> 
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
> For additional commands, e-mail: user-help@struts.apache.org
> 
>

---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
For additional commands, e-mail: user-help@struts.apache.org


Re: The "one Action multiple jsps/tiles"-problem with a twist.

Posted by Jeff Beal <jb...@webmedx.com>.
The first thing to remember is that a Forward is just a Java object. 
You can create them and manipulate them in any way that you want.

For instance, in our application we didn't want the users to use the 
"Back" button on their browser.  We hid the toolbar, disabled the 
necessary shortcuts, and wrote our own server-side mechanism.  From a 
Struts standpoint, this means that what happens when you hit the "Back" 
button (on the web page) is completely dynamic.  There was no way to use 
static forwards defined in the struts-config file to implement that 
functionality.

What I did to implement the navigation aspects of this was to create 
custom ActionMapping and RequestProcessor classes.  The findForward 
method in my custom ActionMapping will create a new instance of an 
ActionForward (without a path attribute) when the back button is 
pressed.  (I use a static String attribute in ActionMapping as the name 
of the forward.)  When the RequestProcessor sees one of these forwards, 
it accesses the session history and sets the path attribute on the 
ActionForward prior to processing it.

In your case, you could do something similar by creating two 
"pre-defined" forwards in a custom ActionMapping: CustomerSummary and 
CustomerOverview.  In your request processor, just detect when a forward 
has one of these two names and access the customer information to 
manipulate the path attribute.

Just one possibility

-- Jeff

Bent André Solheim wrote:
> Hi Struts users,
> 
> I am developing a web based reporting system using Struts, and one
> requirement is that each customer can have their own tailored version
> of the reports.
> 
> I use tiles to define each report page for each customer, and for each
> page for each customer I define a <forward> element in the
> <global-forwards>. In the Actions, I look up what Customer is
> performing the Action and return the approprate ActionForward. This
> works just fine functionally, but it is turning into a maintenance
> issue.
> 
> In struts-config.xml, I have a <forward> element for each customer for
> each report page where the name and path is prefixed with a
> CustomerId;
> 
> ...
> <forward name="customer1id.summary" path="customer1id.summary" ... />
> <forward name="customer2id.summary" path="customer2id.summary" ... />
> <forward name="customer3id.summary" path="customer3id.summary" ... />
> <forward name="customer1id.overview" path="customer1id.overview" ... />
> <forward name="customer2id.overview" path="customer2id.overview" ... />
> ...
> 
> where the path is tiles definition names. I realise that I must have a
> unique path for each report page for each Customer, but ideally I
> would not declare these in struts-config.xml, and in my Actions, I
> would not look up the Customer performing the Action, but just return
> a Customer ignorant forward;
> 
> in my Action:
> ...
> return mapping.findForward("summary");
> 
> in struts-config.xml
> <forward name="summary" path="summary" ... />
> 
> and then plug in some kind of mechanism to the struts framework that
> was able to determine the forward path for the current Customer for
> the given forward name.
> 
> This would save me a lot of typing in the struts-config.xml and would
> clean up my Action classes of the necessary customer aware forward
> lookup.
> 
> Am I making any sense here? Have anybody had similary issues and found
> a decent solution that they would like to share? Is the solution I
> described possible to implement easily?
> 
> Best Regards
> Bent André


---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
For additional commands, e-mail: user-help@struts.apache.org