You are viewing a plain text version of this content. The canonical link for it is here.
Posted to taglibs-user@tomcat.apache.org by Luca Passani <pa...@eunet.no> on 2005/08/30 22:24:12 UTC

JSTL and Java Constants

Hi there, here is my big problem today. I am using JSTL in some JSPs. 
SInce this is a struts project, I would
like to keep my views totally separated from the Java APIs. For this 
reason, I need your advice about the
most elegant to compare a given object "type" (an int constant) with the 
possible values using the COSTANT name,
instead of the corresponding int.
The API defines the types of my object as:

public interface ContentType {

    public static final int FOLDER = 1;
    public static final int URL = 2;
}

in my JSP I have (loop over collection of items with getType() returning 
the type int)

  <c:forEach var="item"  items="${content_list}">
    <c:choose>
     <c:when test="${item.type == 2}">
      <a href="${item.value}"><c:out value="${item.name}"/></a>
     </c:when>
          :

I would like to do something like:

a) <c:when test="${item.type == ContentType.URL}">
 
  This won't work. I could hack it around with a scriptlet and an import 
at the top of my JSP, but that seems to me like
violating  the separation between View and Control

b) I could do something like this in my action:

    String type_url = "5";
    request.setAttribute("url", type_url);

and then <c:when test="${item.type == url}">

but makes me wonder if having this code in the action really makes sense.

Any ideas?

Thanks

Luca



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


Re: JSTL and Java Constants

Posted by Sudhaker Raj <su...@gmail.com>.
And If you can't extend from that class then you can write adapter for that 
class. Something like this

Using in a JSP page:
[code]

<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %>
<jsp:useBean id="Constants" class="com.utils.JSTLMyConstants"/>
<c:out value="${Constants.name <http://Constants.name>}"/><br>
<c:out value="${Constants.age}"/>
<c:forEach var="day" items="${Constants.daysOfTheWeek}">
<c:out value="${day}"/>
</c:forEach>
[/code]

Where adapter class is

[code]

package com.utils;

import java.lang.reflect.Field;
import java.lang.reflect.Modifier;
import java.util.HashMap;
import java.util.Map;

/**
* Class to reveal java constants to JSTL Expression Language
* Uses reflection to scan the declared fields of a Constants class
* Adds these fields to the Map.
* Map is unmodifiable after initialization.
*/
public class JSTLMyConstants extends HashMap {

private boolean initialised = false;

private static final Class adaptee = MyConstant.class;

public JSTLMyConstants() {
Class c = adaptee;
Field[] fields = c.getDeclaredFields();
for (int i = 0; i < fields.length; i++) {

Field field = fields[i];
int modifier = field.getModifiers();
if (Modifier.isFinal(modifier) && !Modifier.isPrivate(modifier))
try {
this.put(field.getName(), field.get(this));
}
catch (IllegalAccessException e) {}
}
initialised = true;
}

public void clear() {
if (!initialised)
super.clear();
else
throw new UnsupportedOperationException("Cannot modify this map");
}

public Object put(Object key, Object value) {
if (!initialised)
return super.put(key, value);
else
throw new UnsupportedOperationException("Cannot modify this map");
}

public void putAll(Map m) {
if (!initialised)
super.putAll(m);
else
throw new UnsupportedOperationException("Cannot modify this map");
}

public Object remove(Object key) {
if (!initialised)
return super.remove(key);
else
throw new UnsupportedOperationException("Cannot modify this map");
}
}

[/code]

// Main constant class

[code]

package com.utils;

public interface MyConstant {

public static final int age = 30;
public static final String name = "Sudhaker Raj";
public static final String programmingSkill = "Awesome";

public static final String[] daysOfTheWeek = { "Sun", "Mon", "Tue", "Wed", 
"Thu", "Fri", "Sat", "Sun" };

}

[/code]

Hope this helps.


On 8/30/05, Luca Passani <pa...@eunet.no> wrote:
> 
> Sudhaker Raj wrote:
> 
> >You may want to see this -
> >
> >http://forums.java.sun.com/thread.jspa?threadID=508847&messageID=2543490
> >
> >
> very smart. A bit overkill for my problem, but very smart...
> 
> Thanks
> 
> Luca
> 
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: taglibs-user-unsubscribe@jakarta.apache.org
> For additional commands, e-mail: taglibs-user-help@jakarta.apache.org
> 
> 


-- 
Cheers,
Sudhaker Raj
http://thej2ee.com

Re: JSTL and Java Constants

Posted by Luca Passani <pa...@eunet.no>.
Sudhaker Raj wrote:

>You may want to see this - 
>
>http://forums.java.sun.com/thread.jspa?threadID=508847&messageID=2543490
>  
>
very smart. A bit overkill for my problem, but very smart...

Thanks

Luca


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


Re: JSTL and Java Constants

Posted by Sudhaker Raj <su...@gmail.com>.
You may want to see this - 

http://forums.java.sun.com/thread.jspa?threadID=508847&messageID=2543490

Cheers,
Sudhaker Raj
http://thej2ee.com

On 8/30/05, Luca Passani <pa...@eunet.no> wrote:
> 
> 
> Hi there, here is my big problem today. I am using JSTL in some JSPs.
> SInce this is a struts project, I would
> like to keep my views totally separated from the Java APIs. For this
> reason, I need your advice about the
> most elegant to compare a given object "type" (an int constant) with the
> possible values using the COSTANT name,
> instead of the corresponding int.
> The API defines the types of my object as:
> 
> public interface ContentType {
> 
> public static final int FOLDER = 1;
> public static final int URL = 2;
> }
> 
> in my JSP I have (loop over collection of items with getType() returning
> the type int)
> 
> <c:forEach var="item" items="${content_list}">
> <c:choose>
> <c:when test="${item.type == 2}">
> <a href="${item.value}"><c:out value="${item.name <http://item.name>
> }"/></a>
> </c:when>
> :
> 
> I would like to do something like:
> 
> a) <c:when test="${item.type == ContentType.URL}">
> 
> This won't work. I could hack it around with a scriptlet and an import
> at the top of my JSP, but that seems to me like
> violating the separation between View and Control
> 
> b) I could do something like this in my action:
> 
> String type_url = "5";
> request.setAttribute("url", type_url);
> 
> and then <c:when test="${item.type == url}">
> 
> but makes me wonder if having this code in the action really makes sense.
> 
> Any ideas?
> 
> Thanks
> 
> Luca
> 
> 
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: taglibs-user-unsubscribe@jakarta.apache.org
> For additional commands, e-mail: taglibs-user-help@jakarta.apache.org
> 
> 


-- 
Cheers,
Sudhaker Raj
http://thej2ee.com

Re: JSTL and Java Constants

Posted by Luca Passani <pa...@eunet.no>.
Martin Cooper wrote:

>
>Yes, it will work the same.
>
>  
>
It works like a charm. You rock. Thanks

Luca


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


Re: JSTL and Java Constants

Posted by Martin Cooper <mf...@gmail.com>.
On 8/31/05, Luca Passani <pa...@eunet.no> wrote:
> 
> Martin Cooper wrote:
> 
> >
> >Done. I think. At least, everything seems to have worked out, so it 
> should
> >be available in the next nightly build of Unstandard.
> >
> >
> will I need to wait tomorrow to download? great. I am eager to try it.


Urk. I just checked, and it looks like Unstandard is not included in the 
nighly builds. Glenn, if you're reading this, could you add it please?

In the meantime, I've put my local build up here:

http://people.apache.org/~martinc/taglibs/unstandard/ 

One little doubt:
> 
> |<un:useConstants var="const" className="java.lang.Integer" />
> 
> The constants are defined in an interface (not a class).
> ||
> public interface ContentType {
> 
> public static final int FOLDER = 1;||
> public static final int URL = 2;
> :
> }
> 
> 
> ||Will the tag work the same?


Yes, it will work the same.

--
Martin Cooper


Thanks
> 
> Luca
> ||
> |
> 
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: taglibs-user-unsubscribe@jakarta.apache.org
> For additional commands, e-mail: taglibs-user-help@jakarta.apache.org
> 
>

Re: JSTL and Java Constants

Posted by Luca Passani <pa...@eunet.no>.
Martin Cooper wrote:

>
>Done. I think. At least, everything seems to have worked out, so it should 
>be available in the next nightly build of Unstandard.
>  
>
will I need to wait tomorrow to download? great. I am eager to try it.

One little doubt:

|<un:useConstants var="const" className="java.lang.Integer" /> 
          
The constants are defined in an interface (not a class). 
||
public interface ContentType {

    public static final int FOLDER = 1;||
    public static final int URL = 2;
       :
}


||Will the tag work the same?

Thanks

Luca
||
|


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


Re: JSTL and Java Constants

Posted by Martin Cooper <mf...@gmail.com>.
On 8/30/05, Martin Cooper <mf...@gmail.com> wrote:
> 
> 
> 
> On 8/30/05, Luca Passani <pa...@eunet.no> wrote:
> > 
> > Martin Cooper wrote:
> > 
> > >
> > >and then 'TheConstants' contains a map of all constants in the class, 
> > so you
> > >can use, for example:
> > >
> > >${TheConstants.URL}
> > >
> > >
> > >
> > bang on. That would be cool. I have worked my problem around in my 
> > application, but your solution would be better, since it would decouple
> > my action from the underlying API. Should I hold my breath?
> 
> 
> Well, I might have a go at adding it tonight, if I have time. It's been a 
> *long* time since I've tried to build Taglibs, though, so if I have trouble 
> with that, it might not happen, since I don't want to break the nightly 
> builds.
> 

Done. I think. At least, everything seems to have worked out, so it should 
be available in the next nightly build of Unstandard.

--
Martin Cooper


--
> Martin Cooper
> 
> 
> Thanks
> > 
> > Luca
> > 
> > 
> > --------------------------------------------------------------------- 
> > To unsubscribe, e-mail: taglibs-user-unsubscribe@jakarta.apache.org
> > For additional commands, e-mail: taglibs-user-help@jakarta.apache.org
> > 
> > 
>

Re: JSTL and Java Constants

Posted by Rahul Akolkar <ra...@gmail.com>.
On 8/31/05, Martin Cooper <mf...@gmail.com> wrote:
> On 8/30/05, Rahul Akolkar <ra...@gmail.com> wrote:
<snip/>
> 2) Another approach that some choose is to provide a "Constants" bean
> > that supplies getters for the constants, which is what we ended up
> > doing for the RDC taglib.
> 
> 
> Isn't that effectively the same thing, once all is said and done? Wouldn't
> accessing a Constants bean be identical to accessing the constants from a
> map provided by this tag?
<snip/>

Was enumerating all the options, the tag is a convenient option, no doubt.

-Rahul

> 
> --
> Martin Cooper

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


Re: JSTL and Java Constants

Posted by Martin Cooper <mf...@gmail.com>.
On 8/30/05, Rahul Akolkar <ra...@gmail.com> wrote:
> 
> On 8/30/05, Martin Cooper <mf...@gmail.com> wrote:
> > On 8/30/05, Luca Passani <pa...@eunet.no> wrote:
> > >
> > > Martin Cooper wrote:
> > >
> > > >
> > > >and then 'TheConstants' contains a map of all constants in the class, 
> so
> > > you
> > > >can use, for example:
> > > >
> > > >${TheConstants.URL}
> > > >
> > > >
> > > >
> > > bang on. That would be cool. I have worked my problem around in my
> > > application, but your solution would be better, since it would 
> decouple
> > > my action from the underlying API. Should I hold my breath?
> >
> >
> > Well, I might have a go at adding it tonight, if I have time. It's been 
> a
> > *long* time since I've tried to build Taglibs, though, so if I have 
> trouble
> > with that, it might not happen, since I don't want to break the nightly
> > builds.
> <snip/>
> 
> That can't stop us ;-) I'm happy to jump in, if needed.
> 
> However, couple of data points:
> 1) This issue is listed to be tackled in the EL 2.1-EDR [
> https://jsp-spec-public.dev.java.net/issues/show_bug.cgi?id=134 ]


That's fine. We can just show them how it should be done. ;-)

2) Another approach that some choose is to provide a "Constants" bean
> that supplies getters for the constants, which is what we ended up
> doing for the RDC taglib.


Isn't that effectively the same thing, once all is said and done? Wouldn't 
accessing a Constants bean be identical to accessing the constants from a 
map provided by this tag?

--
Martin Cooper


-Rahul
> 
> 
> >
> > --
> > Martin Cooper
> >
> >
> > Thanks
> > >
> > > Luca
> > >
> > >
> > > ---------------------------------------------------------------------
> > > To unsubscribe, e-mail: taglibs-user-unsubscribe@jakarta.apache.org
> > > For additional commands, e-mail: taglibs-user-help@jakarta.apache.org
> > >
> > >
> >
> >
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: taglibs-user-unsubscribe@jakarta.apache.org
> For additional commands, e-mail: taglibs-user-help@jakarta.apache.org
> 
>

Re: JSTL and Java Constants

Posted by Rahul Akolkar <ra...@gmail.com>.
On 8/30/05, Martin Cooper <mf...@gmail.com> wrote:
> On 8/30/05, Luca Passani <pa...@eunet.no> wrote:
> >
> > Martin Cooper wrote:
> >
> > >
> > >and then 'TheConstants' contains a map of all constants in the class, so
> > you
> > >can use, for example:
> > >
> > >${TheConstants.URL}
> > >
> > >
> > >
> > bang on. That would be cool. I have worked my problem around in my
> > application, but your solution would be better, since it would decouple
> > my action from the underlying API. Should I hold my breath?
> 
> 
> Well, I might have a go at adding it tonight, if I have time. It's been a
> *long* time since I've tried to build Taglibs, though, so if I have trouble
> with that, it might not happen, since I don't want to break the nightly
> builds.
<snip/>

That can't stop us ;-) I'm happy to jump in, if needed.

However, couple of data points:
1) This issue is listed to be tackled in the EL 2.1-EDR [
https://jsp-spec-public.dev.java.net/issues/show_bug.cgi?id=134 ]
2) Another approach that some choose is to provide a "Constants" bean
that supplies getters for the constants, which is what we ended up
doing for the RDC taglib.

-Rahul


> 
> --
> Martin Cooper
> 
> 
> Thanks
> >
> > Luca
> >
> >
> > ---------------------------------------------------------------------
> > To unsubscribe, e-mail: taglibs-user-unsubscribe@jakarta.apache.org
> > For additional commands, e-mail: taglibs-user-help@jakarta.apache.org
> >
> >
> 
>

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


Re: JSTL and Java Constants

Posted by Martin Cooper <mf...@gmail.com>.
On 8/30/05, Luca Passani <pa...@eunet.no> wrote:
> 
> Martin Cooper wrote:
> 
> >
> >and then 'TheConstants' contains a map of all constants in the class, so 
> you
> >can use, for example:
> >
> >${TheConstants.URL}
> >
> >
> >
> bang on. That would be cool. I have worked my problem around in my
> application, but your solution would be better, since it would decouple
> my action from the underlying API. Should I hold my breath?


Well, I might have a go at adding it tonight, if I have time. It's been a 
*long* time since I've tried to build Taglibs, though, so if I have trouble 
with that, it might not happen, since I don't want to break the nightly 
builds.

--
Martin Cooper


Thanks
> 
> Luca
> 
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: taglibs-user-unsubscribe@jakarta.apache.org
> For additional commands, e-mail: taglibs-user-help@jakarta.apache.org
> 
>

Re: JSTL and Java Constants

Posted by Luca Passani <pa...@eunet.no>.
Martin Cooper wrote:

>
>and then 'TheConstants' contains a map of all constants in the class, so you 
>can use, for example:
>
>${TheConstants.URL}
>
>  
>
bang on. That would be cool. I have worked my problem around in my 
application, but your solution would be better, since it would decouple 
my action from the underlying API. Should I hold my breath?

Thanks

Luca


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


Re: JSTL and Java Constants

Posted by Martin Cooper <mf...@gmail.com>.
On 8/30/05, Luca Passani <pa...@eunet.no> wrote:
> 
> Martin Cooper wrote:
> 
> >Take a look at the 'bind' tag in the Jakarta Taglibs Unstandard tag 
> library.
> >See:
> >
> >
> http://jakarta.apache.org/taglibs/sandbox/doc/unstandard-doc/index.html#bind
> >
> >
> >
> interesting. Do you have an example of how that should be used?


I believe it's something like:

<un:bind var="TheConstant" type="com.yourco.ContentType" field="URL" />

and then you can use 'TheConstant' when you want the value.

My useConstants tag works like this:

<un:useConstants var="TheConstants" className="com.yourco.ContentType" />

and then 'TheConstants' contains a map of all constants in the class, so you 
can use, for example:

${TheConstants.URL}

--
Martin Cooper


Thanks
> 
> Luca
> 
> 
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: taglibs-user-unsubscribe@jakarta.apache.org
> For additional commands, e-mail: taglibs-user-help@jakarta.apache.org
> 
>

Re: JSTL and Java Constants

Posted by Luca Passani <pa...@eunet.no>.
Martin Cooper wrote:

>Take a look at the 'bind' tag in the Jakarta Taglibs Unstandard tag library. 
>See:
>
>http://jakarta.apache.org/taglibs/sandbox/doc/unstandard-doc/index.html#bind
>
>  
>
interesting. Do you have an example of how that should be used?

Thanks

Luca



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


Re: Views outside the servlet container

Posted by Karianne Berg <ke...@start.no>.
Thanks for replying, Martin.

> This isn't exactly a taglibs question...

I was hoping there might be a clever way of using core:import that I hadn't
found, or something contained in one of the other taglibs.

> I'm pretty sure there's no way to do this. JSP pages compile to
> servlets, and those really need a servlet container around to operate
> properly.

The compiled class files could still be in-container even though the source
(jsps) weren't.

> One of the main purposes of web apps and war files is to make the
> applications self-contained, but it seems that's working against what
> you are trying to do. When you refer to "another context than the web
> app itself", what do you mean, exactly?

I meant for example in another web app, deployed seperately.

> If putting the presentation
> in a jar file that lives outside the web app meets this, and JSP is
> not mandatory, then you could try using Velocity instead, and putting
> the templates in a jar somewhere. Exactly where you can put this
> would depend on the particular servlet container you're using.

I'm using Tomcat 5.5.9. Does Velocity allow me to place views outside the
container with Tomcat?

Thanks in advance.

Best regards,
Karianne Berg


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


Re: Views outside the servlet container

Posted by Martin Cooper <mf...@gmail.com>.
On 8/31/05, Karianne Berg <ke...@start.no> wrote:
> 
> Hi,
> 
> I'm not sure if this is the right forum to ask this question, but I'll try
> anyway. I'm working on an application that requires me to place some of 
> the
> JSPs outside of the servlet container, or at least in another context than
> the webapp itself. However, I can't find a way to do this. I have tried to
> use core:import, but this doesn't work, as the page at the url given is
> first rendered and then imported into the page. I need something that
> permits use of the variables sent to the including page in the included
> page. I tried with jsp:include, but this could only include pages in the 
> app
> context.
> 
> If anyone has any suggestions, I would greatly appriciate them.


This isn't exactly a taglibs question...

I'm pretty sure there's no way to do this. JSP pages compile to servlets, 
and those really need a servlet container around to operate properly.

One of the main purposes of web apps and war files is to make the 
applications self-contained, but it seems that's working against what you 
are trying to do. When you refer to "another context than the web app 
itself", what do you mean, exactly? If putting the presentation in a jar 
file that lives outside the web app meets this, and JSP is not mandatory, 
then you could try using Velocity instead, and putting the templates in a 
jar somewhere. Exactly where you can put this would depend on the particular 
servlet container you're using.

--
Martin Cooper


Best regards,
> Karianne Berg
> 
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: taglibs-user-unsubscribe@jakarta.apache.org
> For additional commands, e-mail: taglibs-user-help@jakarta.apache.org
> 
>

Views outside the servlet container

Posted by Karianne Berg <ke...@start.no>.
Hi,

I'm not sure if this is the right forum to ask this question, but I'll try
anyway. I'm working on an application that requires me to place some of the
JSPs outside of the servlet container, or at least in another context than
the webapp itself. However, I can't find a way to do this. I have tried to
use core:import, but this doesn't work, as the page at the url given is
first rendered and then imported into the page. I need something that
permits use of the variables sent to the including page in the included
page. I tried with jsp:include, but this could only include pages in the app
context.

If anyone has any suggestions, I would greatly appriciate them.

Best regards,
Karianne Berg


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


Re: JSTL and Java Constants

Posted by Martin Cooper <mf...@gmail.com>.
Take a look at the 'bind' tag in the Jakarta Taglibs Unstandard tag library. 
See:

http://jakarta.apache.org/taglibs/sandbox/doc/unstandard-doc/index.html#bind

I have a useConstants tag that I've been meaning to donate that exposes all 
of the constants in a class, but I haven't got around to that yet.

--
Martin Cooper


On 8/30/05, Luca Passani <pa...@eunet.no> wrote:
> 
> 
> Hi there, here is my big problem today. I am using JSTL in some JSPs.
> SInce this is a struts project, I would
> like to keep my views totally separated from the Java APIs. For this
> reason, I need your advice about the
> most elegant to compare a given object "type" (an int constant) with the
> possible values using the COSTANT name,
> instead of the corresponding int.
> The API defines the types of my object as:
> 
> public interface ContentType {
> 
> public static final int FOLDER = 1;
> public static final int URL = 2;
> }
> 
> in my JSP I have (loop over collection of items with getType() returning
> the type int)
> 
> <c:forEach var="item" items="${content_list}">
> <c:choose>
> <c:when test="${item.type == 2}">
> <a href="${item.value}"><c:out value="${item.name <http://item.name>
> }"/></a>
> </c:when>
> :
> 
> I would like to do something like:
> 
> a) <c:when test="${item.type == ContentType.URL}">
> 
> This won't work. I could hack it around with a scriptlet and an import
> at the top of my JSP, but that seems to me like
> violating the separation between View and Control
> 
> b) I could do something like this in my action:
> 
> String type_url = "5";
> request.setAttribute("url", type_url);
> 
> and then <c:when test="${item.type == url}">
> 
> but makes me wonder if having this code in the action really makes sense.
> 
> Any ideas?
> 
> Thanks
> 
> Luca
> 
> 
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: taglibs-user-unsubscribe@jakarta.apache.org
> For additional commands, e-mail: taglibs-user-help@jakarta.apache.org
> 
>