cocoon-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Cyril Vidal" <cy...@planetexml.com>
Subject Re: xsp session logicsheet
Date Wed, 05 Feb 2003 18:05:14 GMT

Hi Roman,

thank you very much for your reponse.
I know that in theory, using actions is better than simply mixing pure Java
code in XSP pages. But it's true that I must go quite quickly, and just to
have an idea of how sessions work in Cocoon, I just would to have a first
try with the second solution. Of course, I have in project to have a deeper
understanding of what goes on under the hood with actions, but a little bit
latter. AFAIK, this concept is not really simple to figure out...

The solution you suggested to me works well, thanks:

<?xml version="1.0"?>

<xsp:page

xmlns:xsp="http://apache.org/xsp"

xmlns:xsp-session="http://apache.org/xsp/session/2.0"

xmlns:xsp-request="http://apache.org/xsp/request/2.0"

create-session="true">

<xsp:structure>

<xsp:include>java.util.Vector</xsp:include>

</xsp:structure>

<content>

<xsp:logic>

Vector items = (Vector)<xsp-session:get-attribute name="cart.items"/>;

if (items == null) items = new Vector(10,5);

items.add(<xsp-request:get-parameter name="item"/>);

session.setAttribute("cart.items",items);

<b>The list of items is:</b> <xsp-session:get-attribute name="cart.items"
default="not set"/>


</xsp:logic>

</content>

</xsp:page>



But the result is of the following form:

  The list of items is: 1336364336433643323643
  and I would like better it would be of this form:
    The list of items is:
    .133636
    433
    643
    3643
    323643
So instead of the following code,
<b>The list of items is:</b> <xsp-session:get-attribute name="cart.items"
default="not set"/>

I' ve tried the following one:
<b>The list of items is:</b>
<ul>
for (int i = 0; i &lt; items.size(); i++) {
        <li><xsp:expr>items.get(i)</xsp:expr></li>
}
     </ul>

I have the following error:
Line 226, column 59:  variable i not found in class
org.apache.cocoon.www.mount.essai.session3_xsp

Christian Haul has already taken pains (one more time) to explain me what
went wrong, but I'm afraid I've not all understood. I've casted the former
Object items onto Vector one, as suggested,
but it doesn't seem to be sufficient.

Have any idea?

Regards,
Cyril.



> Hi Cyril,
> you do not have to use actions if you do not want :-)
> As I said, when you use session namespace, there is always a variable
> session there in the generated java code. You can access this session
either
> directly in xsp page from within <xsp:logic> tags, or you can write your
own
> taglib. This taglib can then implicitly use session variable, though it
will
> never be declared there. What I propose to you is a kind of dirty
> programming style, but as I understood you want a quick solution.
>
> Try something like this, you have to experiment and always look at the
> generated code:
>
> <?xml version="1.0"?>
> <xsp:page
> xmlns:xsp="http://apache.org/xsp"
> xmlns:xsp-session="http://apache.org/xsp/session/2.0"
> xmlns:xsp-request="http://apache.org/xsp/request/2.0"
create-session="true">
>
> <html>
>   <xsp:logic>
>     // beginning of the java code
>
>     try {
>    // Cart items are maintained in the session object.
>     Vector items = (Vector)session.getAttribute("cart.items");
>          if (items == null) { items = new Vector(10,5);}
>
>        String item = req.getParameter("item");
>        items.add(item);
>
>        session.setAttribute("cart.items",items);
>   </xsp:logic>
>
> <b>The list of items is:</b> <xsp-session:get-attribute name="cart.items"
> default="not set"/>
>
> </html>
>
> </xsp:page>
>
> Roman
>
>
> -----Original Message-----
> From: Cyril Vidal [mailto:cyril@planetexml.com]
> Sent: Wednesday, February 05, 2003 1:53 PM
> To: cocoon-users@xml.apache.org
> Subject: Re: xsp session logicsheet
>
>
>
> Hi Roman,
>
> Indeed I've done this:
> <?xml version="1.0"?>
>
> <xsp:page
>
> xmlns:xsp="http://apache.org/xsp"
>
> xmlns:xsp-session="http://apache.org/xsp/session/2.0"
>
> xmlns:xsp-request="http://apache.org/xsp/request/2.0"
>
> create-session="true">
>
> <html>
>
> <xsp-session:set-attribute name="cart.items"><xsp-request:get-parameter
> name="item"/></xsp-session:set-attribute>
>
> <b>The list of items is:</b> <xsp-session:get-attribute name="cart.items"
> default="not set"/>
>
> <br/>
>
> <b>Your session was created:</b> <xsp-session:get-creation-time
> as="string"/>
>
> </html>
>
> </xsp:page>
>
> My problem is the following: I would like to add items to the attribute's
> session 'cart.items'.
> For the moment, the preceding code doesn't do this task.
> When I call http://localhost:8080/cocoo/mount/try/session.xsp?item=3
>
> I receive the following html result:
> The list of items is: 3
> Your session was created: Wed Feb 05 13:41:32 CET 2003
>
> when I then call http://localhost:8080/cocoo/mount/try/session.xsp?item=5
> The result is the following:
> The list of items is: 5
> Your session was created: Wed Feb 05 13:41:32 CET 2003
>
> and of course, I would like
> The list of items is: 3, 5
> Your session was created: Wed Feb 05 13:41:32 CET 2003
>
>
> What i would like to know : is it possible to achieve this task by using
> Session Logicsheet by itself, does this Logicsheet provides this
> functionnality?
> If not, the alternative is also to use actions, as suggested in this
thread
> before?
> Is a built-in action available for this, or do I have to build one from
> scratch?
>
> Any help or hint would help me,
> Thanks,
> Cyril.
>
>
>
> > Hi Cyril,
> > try adding
> >
> > xmlns:session="http://apache.org/xsp/session/2.0"
> >
> > namespace to your xsp page. Then have a look at the generated code.
> > Basically you should see a java variable (object) named "session", with
it
> > you can do what you want. No need to declare it, cocoon does it for you.
> > Roman
> >
> > -----Original Message-----
> > From: Cyril Vidal [mailto:cyril@planetexml.com]
> > Sent: Wednesday, February 05, 2003 11:01 AM
> > To: cocoon-users@xml.apache.org
> > Subject: Re: xsp session logicsheet
> >
> >
> >
> > Thanks for you response.
> > hum, I guess actions are still a little bit too complex for me,
regarding
> my
> > knowledge of Cocoon...
> >
> > Isn't it really possible to add merely values to the same session's
> > attribute with the ESQL logicsheet? It   sounds  odd...
> >
> > Cyril.
> >
> > > Hi Cyril
> > > Why don't use an action, I think it's better not to have too much Java
> > code
> > > in your xsp-pages.
> > > In an action you can take your code as it is.
> > > Cheers
> > > Beat
> > >
> > > > Hi,
> > > >
> > > > I would like to deal with session through xsp, and serve as far as
> > > > possible
> > > > the same goal as with the following servlet: e.g put all the
> parameters
> > > > named 'item' in the object of type Vector 'items' bound to the
current
> > > > session, so that it would be possible to list at any time all of the
> > items
> > > > chosen so far by the client in his session.
> > > >
> > > >  public void doGet(HttpServletRequest req, HttpServletResponse res)
> > > >                                throws ServletException, IOException
{
> > > >     res.setContentType("text/html");
> > > >     PrintWriter out = res.getWriter();
> > > >
> > > >     // Get the current session object, create one if necessary.
> > > >     HttpSession session = req.getSession(true);
> > > >
> > > >     // Cart items are maintained in the session object.
> > > >    Vector items = (Vector)session.getAttribute("cart.items");
> > > >         if (items == null) { items = new Vector(10,5);}
> > > >
> > > >       String item = req.getParameter("item");
> > > >       items.add(item);
> > > >
> > > >        session.setAttribute("cart.items",items);
> > > >
> > > >     out.println("<HTML><HEAD><TITLE>SessionTracker
> > > > modifie</TITLE></HEAD>");
> > > >     out.println("<BODY><H1>Session Tracking Demo</H1>");
> > > >
> > > >     // Print the current cart items.
> > > >     out.println("You currently have the following items in your
> > > > cart:<BR>");
> > > >     if (items == null) {
> > > >       out.println("<B>None</B>");
> > > >     }
> > > >     else {
> > > >       out.println("<UL>");
> > > >       for (int i = 0; i < items.size(); i++) {
> > > >         out.println("<LI>" + items.get(i));
> > > >       }
> > > >       out.println("</UL>");
> > > >     }
> > > >
> > > >
> > > >     out.println("</BODY></HTML>");
> > > >   }
> > > > }
> > > >
> > > >  Below is the xsp i've written for the moment,: this is working
fine,
> > but
> > > > does not do what I want: because each time the client chooses an
item
> > and
> > > > pass it via the parameter 'item', instead of being added in the
object
> > > > cart.items, its value overrides this of the preceding parameter.
> > > >
> > > > <?xml version="1.0"?>
> > > >
> > > > <xsp:page
> > > >
> > > > xmlns:xsp="http://apache.org/xsp"
> > > >
> > > > xmlns:xsp-session="http://apache.org/xsp/session/2.0"
> > > >
> > > > xmlns:xsp-request="http://apache.org/xsp/request/2.0"
> > > >
> > > > create-session="true">
> > > >
> > > > <html>
> > > >
> > > > <xsp-session:set-attribute
> name="cart.items"><xsp-request:get-parameter
> > > > name="item"/></xsp-session:set-attribute>
> > > >
> > > > <b>You currently have the following items in your cart:</b>
> > > > <xsp-session:get-attribute name="cart.items"/>
> > > >
> > > > <br/>
> > > >
> > > > <b>Your session was created:</b> <xsp-session:get-creation-time
> > > > as="string"/>
> > > >
> > > > </html>
> > > >
> > > > </xsp:page>
> > > >
> > > > Some of you would know how I can improve my code? Indeed, I would
like
> > > > cart.items to be like a Vector, so that it would be possible to put
> > merely
> > > > values onto it.
> > > > Thanks in advance for your help,
> > > > Cyril.
> > > >
>
> ---------------------------------------------------------------------
> Please check that your question  has not already been answered in the
> FAQ before posting.     <http://xml.apache.org/cocoon/faq/index.html>
>
> To unsubscribe, e-mail:     <cocoon-users-unsubscribe@xml.apache.org>
> For additional commands, e-mail:   <cocoon-users-help@xml.apache.org>
>
>



---------------------------------------------------------------------
Please check that your question  has not already been answered in the
FAQ before posting.     <http://xml.apache.org/cocoon/faq/index.html>

To unsubscribe, e-mail:     <cocoon-users-unsubscribe@xml.apache.org>
For additional commands, e-mail:   <cocoon-users-help@xml.apache.org>


Mime
View raw message