You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@cocoon.apache.org by Cyril Vidal <cy...@planetexml.com> on 2003/02/05 11:00:31 UTC

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:     <co...@xml.apache.org>
> > For additional commands, e-mail:   <co...@xml.apache.org>
> >
>
> --
> +++ GMX - Mail, Messaging & more  http://www.gmx.net +++
> NEU: Mit GMX ins Internet. Rund um die Uhr für 1 ct/ Min. surfen!
>
>
> ---------------------------------------------------------------------
> 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:     <co...@xml.apache.org>
> For additional commands, e-mail:   <co...@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:     <co...@xml.apache.org>
For additional commands, e-mail:   <co...@xml.apache.org>


Re: xsp session logicsheet

Posted by Christian Haul <ha...@dvs1.informatik.tu-darmstadt.de>.
On 05.Feb.2003 -- 04:53 PM, Cyril Vidal wrote:
> I think I'm on the point of being successful with my business.
> But I still have one question, considering the following  short code and
> especially the uncommented snippet: (serves to retrieve and display all the
> items of the current session)
> 
> 
> <?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>
> 
> Object items = <xsp-session:get-attribute name="cart.items"/>;
> 
> if (items == null) items = new Vector(10,5);
> 
> ((Vector) items).add(<xsp-request:get-parameter name="item"/>);
> 
> session.setAttribute("cart.items",items);
> 
> 
> 
> /**************Error here:  method get() and variable i are not known from
> Cocoon's servlet
> 
> <ul>
> 
> for (int i=0; i&lt;items.size(); i++) {

Mind you that items is declared of type Object because that cast to
Vector might result in a NPE when applied to null. Thus size() and
get() method are not declared for this object! You need to cast it
first (and probably assign it to a variable of type vector).

> <li><xsp:expr>items.get(i)</xsp:expr></li>
> 
> }
> 
> </ul>
> 
> **************/
> 
> </xsp:logic>
> 
> </content>
> 
> </xsp:page>

	Chris.
-- 
C h r i s t i a n       H a u l
haul@informatik.tu-darmstadt.de
    fingerprint: 99B0 1D9D 7919 644A 4837  7D73 FEF9 6856 335A 9E08

---------------------------------------------------------------------
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:     <co...@xml.apache.org>
For additional commands, e-mail:   <co...@xml.apache.org>


Re: xsp session logicsheet

Posted by Cyril Vidal <cy...@planetexml.com>.
I think I'm on the point of being successful with my business.
But I still have one question, considering the following  short code and
especially the uncommented snippet: (serves to retrieve and display all the
items of the current session)


<?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>

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

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

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

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



/**************Error here:  method get() and variable i are not known from
Cocoon's servlet

<ul>

for (int i=0; i&lt;items.size(); i++) {

<li><xsp:expr>items.get(i)</xsp:expr></li>

}

</ul>

**************/

</xsp:logic>

</content>

</xsp:page>



Why do I receive the following two errors:

Line 174, column 58:  variable i not found in class
org.apache.cocoon.www.mount.essai.session3_xsp
Line 174, column 54:  method get() not found in class java.lang.Object


Is the syntax  I am using here not the same as the following, which is OK?



<elements>

<xsp:logic>

for (int i=1; i&lt;11; i++)

{

<element><xsp:expr>i</xsp:expr></element>

}

</xsp:logic>

</elements>



Which is the difference between them?



Regards,

Cyril

----- Original Message -----
From: "Christian Haul" <ha...@dvs1.informatik.tu-darmstadt.de>
To: <co...@xml.apache.org>
Sent: Wednesday, February 05, 2003 3:19 PM
Subject: Re: xsp session logicsheet


> On 05.Feb.2003 -- 02:56 PM, Cyril Vidal wrote:
> > Hello Christian,
> >
> > Thanks again for your help and your availibility.
> > Of course, I meant Session logicsheet and not ESQL one...Sorry...
> > I've tried to launch the code you've suggested:
> >
> > <?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">
>
> The class Vector is unknown here. Add
>
>   <xsp:structure>
>      <xsp:include>java.util.Vector</xsp:include>
>   </xsp:structure>
>
> in order to create an import statement.
>
> Add some markup here, otherwise the following code won't be inside the
> generate() method but would be expected to be a valid method
> declaration.
>
> <content>
> >
> > <xsp:logic>
> >
> > Object items = <xsp-session:get-attribute name="cart.items"/>;
> >
> > if (items == null) items = new Vector(10,5);
> >
> > ((Vector) items).add(<xsp-request:get-parameter name="item"/>);
> >
> > request.getSession().setAttribute(items);
> >
> > // logicsheet only supports setting Strings objects :-(
> >
> > // thus do it manually.
> >
> > </xsp:logic>
>
> </content>
>
> > </xsp:page>
>
> > Regards,
> > Cyril.
> > PS: In the code, you've written:
> > request.getSession().setAttribute(items);
> >
> > shall we not write instead
> >
> > request.getSession().setAttribute("cart-item", items);
> >
> > as in the traditional java servlet?
>
> Absolutely, you are right. And the other poster is also right that
> there is a variable named "session" if the session logicsheet is
> used. Thus it suffices to write
>
>   session.setAttribute("cart.items", items);
>
> Chris.
>
> BTW when writing to the list you don't need to CC me -- it will end up
> in the same mailbox anyway (as duplicates).
>
> --
> C h r i s t i a n       H a u l
> haul@informatik.tu-darmstadt.de
>     fingerprint: 99B0 1D9D 7919 644A 4837  7D73 FEF9 6856 335A 9E08
>
> ---------------------------------------------------------------------
> 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:     <co...@xml.apache.org>
> For additional commands, e-mail:   <co...@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:     <co...@xml.apache.org>
For additional commands, e-mail:   <co...@xml.apache.org>


Re: xsp session logicsheet

Posted by Christian Haul <ha...@dvs1.informatik.tu-darmstadt.de>.
On 05.Feb.2003 -- 02:56 PM, Cyril Vidal wrote:
> Hello Christian,
> 
> Thanks again for your help and your availibility.
> Of course, I meant Session logicsheet and not ESQL one...Sorry...
> I've tried to launch the code you've suggested:
> 
> <?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">

The class Vector is unknown here. Add

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

in order to create an import statement.

Add some markup here, otherwise the following code won't be inside the
generate() method but would be expected to be a valid method
declaration. 

<content>
> 
> <xsp:logic>
> 
> Object items = <xsp-session:get-attribute name="cart.items"/>;
> 
> if (items == null) items = new Vector(10,5);
> 
> ((Vector) items).add(<xsp-request:get-parameter name="item"/>);
> 
> request.getSession().setAttribute(items);
> 
> // logicsheet only supports setting Strings objects :-(
> 
> // thus do it manually.
> 
> </xsp:logic>

</content>

> </xsp:page>

> Regards,
> Cyril.
> PS: In the code, you've written:
> request.getSession().setAttribute(items);
> 
> shall we not write instead
> 
> request.getSession().setAttribute("cart-item", items);
> 
> as in the traditional java servlet?

Absolutely, you are right. And the other poster is also right that
there is a variable named "session" if the session logicsheet is
used. Thus it suffices to write

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

	Chris.

BTW when writing to the list you don't need to CC me -- it will end up
in the same mailbox anyway (as duplicates).

-- 
C h r i s t i a n       H a u l
haul@informatik.tu-darmstadt.de
    fingerprint: 99B0 1D9D 7919 644A 4837  7D73 FEF9 6856 335A 9E08

---------------------------------------------------------------------
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:     <co...@xml.apache.org>
For additional commands, e-mail:   <co...@xml.apache.org>


Re: xsp session logicsheet

Posted by Cyril Vidal <cy...@planetexml.com>.
Hello Christian,

Thanks again for your help and your availibility.
Of course, I meant Session logicsheet and not ESQL one...Sorry...
I've tried to launch the code you've suggested:

<?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:logic>

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

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

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

request.getSession().setAttribute(items);

// logicsheet only supports setting Strings objects :-(

// thus do it manually.

</xsp:logic>


</xsp:page>

But, I receive following error message:

type fatal

message Language Exception

description org.apache.cocoon.ProcessingException: Language Exception:
org.apache.cocoon.components.language.LanguageException: Error compiling
session3_xsp: Line 78, column 6: illegal start of type Line 79, column 6:
illegal start of type Line 88, column 24: expected Line 88, column 14:
cannot access class getSession; file request\getSession.class not found Line
73, column 47: variable session not found in class
org.apache.cocoon.www.mount.essai.session3_xsp Line 0, column 0: 5 errors

sender org.apache.cocoon.servlet.CocoonServlet

source Cocoon servlet

stack-trace

org.apache.cocoon.ProcessingException: Language Exception:
org.apache.cocoon.components.language.LanguageException: Error compiling
session3_xsp:
Line 78, column 6:  illegal start of type
Line 79, column 6:  illegal start of type
Line 88, column 24:   expected
Line 88, column 14:  cannot access class getSession; file
request\getSession.class not found
Line 73, column 47:  variable session not found in class
org.apache.cocoon.www.mount.essai.session3_xsp
Line 0, column 0:
5 errors

I've cheked out in the source code of the xsp file generated:

   68     /* User Class Declarations */

   70  Object items =

    72   (
    73      XSPSessionHelper.getSessionAttribute(session,
    74      String.valueOf("cart.items"),
    75     null)
    76    )
    77  ;
    78  if (items == null) items = new Vector(10,5);
    79  ((Vector) items).add(

    81  (
    82  (XSPRequestHelper.getParameter(objectModel,
    83   "item", null,
    84    null,
    85    null))
    86    )
    87);

 I can't figure out why the line 78 throws an illegal start type...Do you
see what can be wrong?

Regards,
Cyril.
PS: In the code, you've written:
request.getSession().setAttribute(items);

shall we not write instead

request.getSession().setAttribute("cart-item", items);

as in the traditional java servlet?

I'm not sure...



---------------------------------------------------------------------
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:     <co...@xml.apache.org>
For additional commands, e-mail:   <co...@xml.apache.org>


Re: xsp session logicsheet

Posted by Christian Haul <ha...@dvs1.informatik.tu-darmstadt.de>.
On 05.Feb.2003 -- 11:00 AM, Cyril Vidal wrote:
> 
> 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...

Er, no. But you probably didn't mean ESQL anyway.

You need to do it as you did it before: retrieve the value, add a new
element to it and then store it again.

> > >     // 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);

Would translate to

   <xsp:logic>
      Object items = <xsp-session:get-attribute name="cart.items"/>;
      if (items == null) items = new Vector(10,5);
      ((Vector) items).add(<xsp-request:get-parameter name="item"/>);
      request.getSession().setAttribute(items); 
      // logicsheet only supports setting Strings objects :-(
      // thus do it manually.
   </xsp:logic>


	Chris.
-- 
C h r i s t i a n       H a u l
haul@informatik.tu-darmstadt.de
    fingerprint: 99B0 1D9D 7919 644A 4837  7D73 FEF9 6856 335A 9E08

---------------------------------------------------------------------
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:     <co...@xml.apache.org>
For additional commands, e-mail:   <co...@xml.apache.org>