You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@struts.apache.org by Raghu Kanchustambham <kr...@gmail.com> on 2006/01/25 18:58:26 UTC

One Pass JSP Parsing Woes! - how to generate Dynamic JSP and enforce those tags get parsed/translated?

Hi,
I am trying to generate a *dynamic* menu.
I have a regular 'java' function which spits out menu tags (struts
layout taglib related).
The intention is to use Sitemesh to create the menu depending on the
access permissions of the logged in user without any "dirty coding" in
JSP's.

<%=Resource.generateMenu(DataAccessManager.getResourceById(-1))%>

Resource.generateMenu recursively calls itself till it generates a
string of menu tags depending on access permissions. Ignore the fact
that my JSP is directly calling a function in my dataacess layer! ;-)
Will fix it once I get this to work:-)


I am stuck with the following problem. I do not know how to force the
interpretation of the string of tags generated. What is happening (as
expected) is that the tags just pass to the browser as they are with
OUT getting processed.

A "view source" on my browser shows the following:

  <body>
       <table width="100%">
       <tr width="100%">

<!-- The output of generateMenu function starts here -->
       <layout:dynMenu config='MainMenu' left='10' top='10'>
               <layout:menuItem key='All' link='All'>
                       <layout:menuItem key='Reports'
link='Reports'></layout:menuItem>
                       <layout:menuItem key='Student' link='Student'>
                               <layout:menuItem key='Enrollment'
link='Enrollment'></layout:menuItem>
                               <layout:menuItem key='Enquiry'
link='Enquiry'></layout:menuItem>
                               <layout:menuItem key='Search'
link='Search'></layout:menuItem>
                       </layout:menuItem>
                       <layout:menuItem key='Management' link='Management'>
                               <layout:menuItem key='Location'
link='Location'></layout:menuItem>
                               <layout:menuItem key='Centre'
link='Centre'></layout:menuItem>
                               <layout:menuItem key='Course'
link='Course'></layout:menuItem>
                       </layout:menuItem>
               </layout:menuItem>
       </layout:dynMenu>
etc.....



Note that these tags are generated as a result of the generateMenu
function and are NOT getting processed further on the server side
before they
are pushed on to the browser. I believe JSP does only ONE pass
parsing. How do I circumvent this problem and get my tags to be
processed before they leave the server?

Thanks.
Regards,
Raghu

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


Re: One Pass JSP Parsing Woes! - how to generate Dynamic JSP and enforce those tags get parsed/translated?

Posted by Raghu Kanchustambham <kr...@gmail.com>.
Since I can not force the processing of the tags that are generated on
the fly, I chose a hack to call the functions that the container would
call on the tag myself explicitly. By doing so, I explicitly forced
the tag-lifecycle.

I am not claiming this is a neat solution, but the best of the
workable solutions I had.

Hope the following code helps:


 private static void generateMenuItem(User user, Resource resource,
PageContext ctx, Tag parent)
    {
        if (resource ==null)
        return ;


        //Playing the container for the tag: "<layout:menuItem
key='"+resource.getName()+"' link='"+resource.getName()+"'>");
        Tag tag = null;

        if (StringUtils.isNotEmpty(resource.getMenuDisplayName()) &&
!(resource.isDenied()))
        {
            tag = new MenuItemTag2();
            tag.setPageContext(ctx);
            tag.setParent(parent);
            ((MenuItemTag2)tag).setKey(resource.getMenuDisplayName());

            if (StringUtils.isNotEmpty(resource.getMenuLink()))
                ((MenuItemTag2)tag).setLink(resource.getMenuLink());

            try {
              tag.doStartTag();
            } catch (JspException e) {
              e.printStackTrace();  //TODO: Log this error in the
appropriate logger
            }
        }
        else
        {
            tag=parent; //for the children of this tag, the parent
will have to be set to the parent of this tag.
        }

       for(Iterator itr = resource.getSubResources().iterator(); itr.hasNext();)
       {
            generateMenuItem(user,(Resource) itr.next(),ctx,tag);
       }

       if (StringUtils.isNotEmpty(resource.getMenuDisplayName()) &&
!(resource.isDenied()))
       {
           //Playing the container for the tag: ("</layout:menuItem>");
           try {
                tag.doEndTag();
            } catch (JspException e) {
           e.printStackTrace();
           }
            tag.release();
       }

    }




On 1/30/06, Kai Mai <ka...@gmail.com> wrote:
> Raghu,
> can you be more specific about your solution?  how about giving some coding
> examples?
>
> Thanks.
> Kai
>
> On 1/27/06, Raghu Kanchustambham <kr...@gmail.com> wrote:
> >
> > Hi,
> > I solved the problem by "playing the container".
> >
> > I called the tag functions that the container would have called in the
> > same sequence. This surely is a hack, but works for me right now.
> >
> > If you guys have a better way to solve this issue, I would be glad to hear
> > it.
> >
> > Regards,
> > Raghu
> >
> >
> > On 1/25/06, Raghu Kanchustambham <kr...@gmail.com> wrote:
> > > Hi,
> > > I am trying to generate a *dynamic* menu.
> > > I have a regular 'java' function which spits out menu tags (struts
> > > layout taglib related).
> > > The intention is to use Sitemesh to create the menu depending on the
> > > access permissions of the logged in user without any "dirty coding" in
> > > JSP's.
> > >
> > > <%=Resource.generateMenu(DataAccessManager.getResourceById(-1))%>
> > >
> > > Resource.generateMenu recursively calls itself till it generates a
> > > string of menu tags depending on access permissions. Ignore the fact
> > > that my JSP is directly calling a function in my dataacess layer! ;-)
> > > Will fix it once I get this to work:-)
> > >
> > >
> > > I am stuck with the following problem. I do not know how to force the
> > > interpretation of the string of tags generated. What is happening (as
> > > expected) is that the tags just pass to the browser as they are with
> > > OUT getting processed.
> > >
> > > A "view source" on my browser shows the following:
> > >
> > >  <body>
> > >       <table width="100%">
> > >       <tr width="100%">
> > >
> > > <!-- The output of generateMenu function starts here -->
> > >       <layout:dynMenu config='MainMenu' left='10' top='10'>
> > >               <layout:menuItem key='All' link='All'>
> > >                       <layout:menuItem key='Reports'
> > > link='Reports'></layout:menuItem>
> > >                       <layout:menuItem key='Student' link='Student'>
> > >                               <layout:menuItem key='Enrollment'
> > > link='Enrollment'></layout:menuItem>
> > >                               <layout:menuItem key='Enquiry'
> > > link='Enquiry'></layout:menuItem>
> > >                               <layout:menuItem key='Search'
> > > link='Search'></layout:menuItem>
> > >                       </layout:menuItem>
> > >                       <layout:menuItem key='Management'
> > link='Management'>
> > >                               <layout:menuItem key='Location'
> > > link='Location'></layout:menuItem>
> > >                               <layout:menuItem key='Centre'
> > > link='Centre'></layout:menuItem>
> > >                               <layout:menuItem key='Course'
> > > link='Course'></layout:menuItem>
> > >                       </layout:menuItem>
> > >               </layout:menuItem>
> > >       </layout:dynMenu>
> > > etc.....
> > >
> > >
> > >
> > > Note that these tags are generated as a result of the generateMenu
> > > function and are NOT getting processed further on the server side
> > > before they
> > > are pushed on to the browser. I believe JSP does only ONE pass
> > > parsing. How do I circumvent this problem and get my tags to be
> > > processed before they leave the server?
> > >
> > > Thanks.
> > > Regards,
> > > Raghu
> > >
> >
> > ---------------------------------------------------------------------
> > 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: One Pass JSP Parsing Woes! - how to generate Dynamic JSP and enforce those tags get parsed/translated?

Posted by Kai Mai <ka...@gmail.com>.
Raghu,
can you be more specific about your solution?  how about giving some coding
examples?

Thanks.
Kai

On 1/27/06, Raghu Kanchustambham <kr...@gmail.com> wrote:
>
> Hi,
> I solved the problem by "playing the container".
>
> I called the tag functions that the container would have called in the
> same sequence. This surely is a hack, but works for me right now.
>
> If you guys have a better way to solve this issue, I would be glad to hear
> it.
>
> Regards,
> Raghu
>
>
> On 1/25/06, Raghu Kanchustambham <kr...@gmail.com> wrote:
> > Hi,
> > I am trying to generate a *dynamic* menu.
> > I have a regular 'java' function which spits out menu tags (struts
> > layout taglib related).
> > The intention is to use Sitemesh to create the menu depending on the
> > access permissions of the logged in user without any "dirty coding" in
> > JSP's.
> >
> > <%=Resource.generateMenu(DataAccessManager.getResourceById(-1))%>
> >
> > Resource.generateMenu recursively calls itself till it generates a
> > string of menu tags depending on access permissions. Ignore the fact
> > that my JSP is directly calling a function in my dataacess layer! ;-)
> > Will fix it once I get this to work:-)
> >
> >
> > I am stuck with the following problem. I do not know how to force the
> > interpretation of the string of tags generated. What is happening (as
> > expected) is that the tags just pass to the browser as they are with
> > OUT getting processed.
> >
> > A "view source" on my browser shows the following:
> >
> >  <body>
> >       <table width="100%">
> >       <tr width="100%">
> >
> > <!-- The output of generateMenu function starts here -->
> >       <layout:dynMenu config='MainMenu' left='10' top='10'>
> >               <layout:menuItem key='All' link='All'>
> >                       <layout:menuItem key='Reports'
> > link='Reports'></layout:menuItem>
> >                       <layout:menuItem key='Student' link='Student'>
> >                               <layout:menuItem key='Enrollment'
> > link='Enrollment'></layout:menuItem>
> >                               <layout:menuItem key='Enquiry'
> > link='Enquiry'></layout:menuItem>
> >                               <layout:menuItem key='Search'
> > link='Search'></layout:menuItem>
> >                       </layout:menuItem>
> >                       <layout:menuItem key='Management'
> link='Management'>
> >                               <layout:menuItem key='Location'
> > link='Location'></layout:menuItem>
> >                               <layout:menuItem key='Centre'
> > link='Centre'></layout:menuItem>
> >                               <layout:menuItem key='Course'
> > link='Course'></layout:menuItem>
> >                       </layout:menuItem>
> >               </layout:menuItem>
> >       </layout:dynMenu>
> > etc.....
> >
> >
> >
> > Note that these tags are generated as a result of the generateMenu
> > function and are NOT getting processed further on the server side
> > before they
> > are pushed on to the browser. I believe JSP does only ONE pass
> > parsing. How do I circumvent this problem and get my tags to be
> > processed before they leave the server?
> >
> > Thanks.
> > Regards,
> > Raghu
> >
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
> For additional commands, e-mail: user-help@struts.apache.org
>
>

Re: One Pass JSP Parsing Woes! - how to generate Dynamic JSP and enforce those tags get parsed/translated?

Posted by Raghu Kanchustambham <kr...@gmail.com>.
Hi,
I solved the problem by "playing the container".

I called the tag functions that the container would have called in the
same sequence. This surely is a hack, but works for me right now.

If you guys have a better way to solve this issue, I would be glad to hear it.

Regards,
Raghu


On 1/25/06, Raghu Kanchustambham <kr...@gmail.com> wrote:
> Hi,
> I am trying to generate a *dynamic* menu.
> I have a regular 'java' function which spits out menu tags (struts
> layout taglib related).
> The intention is to use Sitemesh to create the menu depending on the
> access permissions of the logged in user without any "dirty coding" in
> JSP's.
>
> <%=Resource.generateMenu(DataAccessManager.getResourceById(-1))%>
>
> Resource.generateMenu recursively calls itself till it generates a
> string of menu tags depending on access permissions. Ignore the fact
> that my JSP is directly calling a function in my dataacess layer! ;-)
> Will fix it once I get this to work:-)
>
>
> I am stuck with the following problem. I do not know how to force the
> interpretation of the string of tags generated. What is happening (as
> expected) is that the tags just pass to the browser as they are with
> OUT getting processed.
>
> A "view source" on my browser shows the following:
>
>  <body>
>       <table width="100%">
>       <tr width="100%">
>
> <!-- The output of generateMenu function starts here -->
>       <layout:dynMenu config='MainMenu' left='10' top='10'>
>               <layout:menuItem key='All' link='All'>
>                       <layout:menuItem key='Reports'
> link='Reports'></layout:menuItem>
>                       <layout:menuItem key='Student' link='Student'>
>                               <layout:menuItem key='Enrollment'
> link='Enrollment'></layout:menuItem>
>                               <layout:menuItem key='Enquiry'
> link='Enquiry'></layout:menuItem>
>                               <layout:menuItem key='Search'
> link='Search'></layout:menuItem>
>                       </layout:menuItem>
>                       <layout:menuItem key='Management' link='Management'>
>                               <layout:menuItem key='Location'
> link='Location'></layout:menuItem>
>                               <layout:menuItem key='Centre'
> link='Centre'></layout:menuItem>
>                               <layout:menuItem key='Course'
> link='Course'></layout:menuItem>
>                       </layout:menuItem>
>               </layout:menuItem>
>       </layout:dynMenu>
> etc.....
>
>
>
> Note that these tags are generated as a result of the generateMenu
> function and are NOT getting processed further on the server side
> before they
> are pushed on to the browser. I believe JSP does only ONE pass
> parsing. How do I circumvent this problem and get my tags to be
> processed before they leave the server?
>
> Thanks.
> Regards,
> Raghu
>

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