T5 File Upload inside AjaxFormLoop? (as in several attachments to a mail message)

2008-06-10 Thread Ognen Ivanovski

Hi all,

I'm trying to write a page that mimics an email composition form. On
this form the user should be allowed to add any number of attachments 
(files).


My idea is to use an AjaxFormLoop and a file upload component inside. 
The problem is - I can't.


The loop needs an iterable to work over - ok - that is a list of 
UploadedFiles. But, the 'addRow' event says it needs to return a 
non-null value so that the loop can correctly use it. But - i don't have 
an uploaded file yet - i just want a new Upload component to render itself.


Second problem - how would I process the files at the end?

My code - so far:

public class Test {


  @Property private ListUploadedFile files = new 
ArrayListUploadedFile();


  @Property private UploadedFile currentValue;


  @Property private DefaultPrimaryKeyEncoderInteger, UploadedFile 
encoder = new DefaultPrimaryKeyEncoderInteger, UploadedFile();


  @InjectComponent private Block newFileBlock;

  public int getNumOfFiles() {
return files.size();
  }

  public void onSubmit() {
// what do i do here?
  }

  public Block onAddRow() {
return null; // what do i do here? this causes illegal state excepton
  }
}

Test.tml:

t:form
  t:ajaxformloop source=files value=currentValue 
encoder=encoder

t:submitnotifier
  t:upload t:id=currentValue value=currentValue /
  t:removerowlinkremove/t:removerowlink
/t:submitnotifier
t:parameter name=addRow
  t:addrowlinkAdd a row/t:addrowlink
/t:parameter
  /t:ajaxformloop

  div class=t-beaneditor-row
 input type=submit value=Submit/
  /div

/t:form

pNumber of strings (after submit): ${numOfFiles}/p

t:grid source=files/


-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



Re: T5 File Upload inside AjaxFormLoop? (as in several attachments to a mail message)

2008-06-10 Thread Ognen Ivanovski

Robert Zeigler wrote:

Couldn't you use a list of placeholders/wrappers?
This is what I've done in the past in similar sorts of scenarios, 
although it wasn't ajax-based.
I created a list of UploadContainers.  This ended up being useful 
because then I could associate other sorts of values to each upload row 

[]

I think I will try this upload container approach. It might also help 
with storing uploaded files locally in case of validation errors on the 
form. Since files are intended to be large (audio/video) having to 
upload one once again just because of e.g. wrong email can be annoying.


Ognen


-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



[T5][tapestry-upload] File uploads in conversations

2008-06-10 Thread Ognen Ivanovski

I have the following requirement:

A user fills out a form (similar to email composition) and is allowed to 
upload a certain number of potentially large files. Since the form may 
have errors its successful competition may happen after several submits 
(posts) which make up a single conversation.



I've found two problems while using tapestry-upload in such a scenario 
(conversation mode):


1) UploadedFiles are forcefully deleted on thread cleanup so it is not 
possible to keep uploaded files around for the duration of the 
conversation. - Is it possible abstract this behaveour in a cleanup 
strategy and have another one that cleans up differenty (either at end 
of conversation, or it leaves it to the FileCleaner - which does it 
after the FileItem object is garbage collected)?


2) UploadedFile / UploadedFileItem are not serializable - thus they 
cannot go into a session.


Do you think tapestry-upload should support conversational uploads?


In the meanwhile, I'm trying to work this around:

The idea is that a service (UploadManager) keeps track of 
UploadConversation. one UploadConversation is associated with a single 
upload attempt (multiple files across potentially multiple POSTs). The 
UploadConversation stores all uploaded files on temporary file locations 
and makes them all available for processing when the session ends.


Ideally I would keep the UploadedConversation @Persist(session) (-ed) 
throughout the conversation. When the form is submitted successfully, 
I'd just discard persisted data using ComponentResources.


But since I'm building this as a library functionality I'd like to add 
some safety measures - I'd like to delete the tracked files associated 
with one UploadConversation. So


1) is there a way to find out when an object that was 
@Persist(session) -ed is no longer in use (apart from finalize() / 
PhantomReference)


2) if no, is there an easy way to find out when a http session gets 
discarded/invalidated?




-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



Re: T5: Tapestry-Hibernate, do we have to save()?

2007-10-31 Thread Ognen Ivanovski

lasitha wrote:

However, your post brings up an interesting question:  will the
object's state be persisted even after validation fails?  My first


Seems obvious that a transaction should be wrapped around the form 
validation (or around the whole request) which would rollback in case of 
valdation errors.


The question is - how to do it? Better yet, how to do it without 
boilerplate code all around?


tapestry-ioc allows you to write interceptors on service method calls. I 
don't think it allows you to write such interceptors around components 
and pages.


I remember that one of the good things you'd get when you'd combine 
struts 1 and spring was that allowing spring to create your actions you 
had full control over when and where transactions started and ended.


I think that it might be a drawback that tapestry 5 does not allow you 
to use the IoC containers AOP facilities on components and pages.



Ognen

P.S. In my Eclipse-RCP project I also use JSF's approach: values are 
kept in the controls (field components) until the form is submitted (ok 
pressed).



--
Ognen Ivanovski | [EMAIL PROTECTED]
phone +389 -2- 30 64 532 | fax +389 -2- 30 79 495
Netcetera | 1000 Skopje | Macedonia | http://netcetera.com.mk


-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



Re: Mixing T5 and Guice --- best practices

2007-10-31 Thread Ognen Ivanovski

Jan Vissers wrote:
Please, please don't 'shoot' me - but if this is the case what would be 
a reason for me to use T5 IoC, other that for injecting stuff into page 
classes?


I think the T5 IoC is great, fast, simple and covers 80% of the things 
you  need an IoC container for. Plug, allows you to override a great 
many parts of tapestry which, to me, is a great value. Contributions, I 
wont even mention (myself a long time RCP developer, I consider them a 
must).


Furthermore, if you need a more powerful container (like spring or 
something) you can always plug it in  via an ObjectProvider.


The only things that might be missed at the moment is:

 a) You can't use decorators on pages and components (you could us the 
request processing chain of command, but that might not be so expressive)
 b) decoration of multiple services might not be as expressive as one 
would like it to be if one would like use declarative transaction 
management. Work is being done here 
(http://tapestry.apache.org/tapestry5/tapestry-ioc/decorator.html see 
Targetting multiple services).




--
Ognen Ivanovski | [EMAIL PROTECTED]
phone +389 -2- 30 64 532 | fax +389 -2- 30 79 495
Netcetera | 1000 Skopje | Macedonia | http://netcetera.com.mk


-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



Re: [T5] Debugging

2007-10-25 Thread Ognen Ivanovski

Michael Gerzabek wrote:

+1


Walking through a custom written component in T5 is like a day in 
Alice's world. Magic where ever you look. From user perspective there 
needs to be a little support in debugging.


:) Exactly!



--
Ognen Ivanovski | [EMAIL PROTECTED]
phone +389 -2- 30 64 532 | fax +389 -2- 30 79 495
Netcetera | 1000 Skopje | Macedonia | http://netcetera.com.mk


-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



[T5] Debugging

2007-10-24 Thread Ognen Ivanovski
Perhaps you've noticed how difficult it is to debug a T5 application 
because of


 - the jassist enhancements tapestry does to the components / pages
 - the IoC proxies

Far from saying that these are bad, I am just wondering if there is a 
possibility to add some debugger info along with these enhancements to 
make IDE debugging as simple as it is to code with tapestry?


Stepping into methods is what looks bad...


--
Ognen Ivanovski | [EMAIL PROTECTED]
phone +389 -2- 30 64 532 | fax +389 -2- 30 79 495
Netcetera | 1000 Skopje | Macedonia | http://netcetera.com.mk


-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



[T4] OGNL reference to a class object

2007-09-18 Thread Ognen Ivanovski

Just a quick one...

How can I refer to a class object in OGNL, if I know the class name  
itself.  In Java I would do 'com.foo.example.ExampleClass.class'. How  
is this done in OGNL?


I'm using a component that accepts a Class as a parameter, I need to  
pass in a specific class.


Maybe this is done with a different prefix (not ognl: but something  
else)?


Ognen

-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



Re: [T4] OGNL reference to a class object

2007-09-18 Thread Ognen Ivanovski


On 2007-09-18, at 11:17, Ognen Ivanovski wrote:


Just a quick one...

How can I refer to a class object in OGNL, if I know the class name  
itself.  In Java I would do 'com.foo.example.ExampleClass.class'.  
How is this done in OGNL?


Found it. The syntax is: @[EMAIL PROTECTED]



-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



Re: Anybody's developing object oriented?

2007-08-27 Thread Ognen Ivanovski


On 2007-08-27, at 09:58, Marcus Schmidke wrote:

Most of my JSF-problems seem to have a Tapestry-solution, that's  
fine. But, oh no, what is this ValueEncoder-thing??? Don't say it  
is what I'm

afraid of it might be ...



I am working on a solution that I will post on the Tapestry wiki as  
soon as I get it nice enough. This will give you what you want when  
you are using Hibernate for your objects. I think I will be able to  
post that in about 2-3 days, time permitting.


Cheers,
Ognen

--
Ognen Ivanovski | ognen.ivanovski [at] netcetera.com.mk
phone +389 -2- 30 64 532 | fax +389 -2- 30 79 495
Netcetera | 1000 Skopje | Macedonia | http://netcetera.com.mk



-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



[T5] ComponentClassResolver should expose it's configuration

2007-08-27 Thread Ognen Ivanovski

Hi again,

I think that the ComponentClassResolver should expose it's  
configuration via the service interface; i.e. it should say which  
packages are library packages. Of course this configuration should be  
immutable.


public ListLibraryMapping getLibraryMappings();

The need for this can be illustrated by the tapestry-hibernate  
module. In HibernateModule we see that the HibernateSessionSource  
service accepts a configuration of packages that should be searched  
for entities.


So in the module we have:

/**
 * Contributes the package lt;rootgt;.entities to the  
configuration, so that it will be

 * scanned for annotated entity classes.
 */
public static void contributeHibernateSessionSource 
(ConfigurationString configuration,


@Inject
@Symbol(InternalConstants.TAPESTRY_APP_PACKAGE_PARAM)
String appRootPackage)
{
configuration.add(appRootPackage + .entities);
}

Which adds the application standard entity package to the sessions  
source configuration. Now, this is ok for single module applications.  
When you have an application that is composed of several sub-apps, in  
each of them you have to contribute


public void contributeComponentClassResolver 
(ConfigurationLibraryMapping conf)

{
conf.add(new LibraryMapping(subapp1, com.example.subapp1);
}

public void contributeHibernateSessionSource 
(ConfigurationString configuration)

{
configuration.add(com.example.subapp1.entities);
}

This is not so DRY. I'm also developing a service that adds type  
coercions for all entities. It too needs to scan the entity packages  
so it too must be configured with a package. Then I have a navigation  
service + component that builds up a navigation tree by scanning for  
pages that have a @Navigable annotation. it too needs to receive yet  
the same packages as configuration so it can scan. So in each sub-app  
module I have 4 different contribution method contribution more or  
less the same information on different places.


But if the ComponentClassResolver would expose the library mappings  
then I would have something like:


public static void contributeHibernateSessionSource(
@Inject componentClassResolver componentClassResolver,
ConfigurationString configuration
)
{
	for (LibraryMapping lib : componentClassResolver.getLibraryMappings 
()) {

  configuration.add(lib.getRootPackage() + .entities);
}
}

So all these services (hibernate source, navigation service,  
hibernate entity coercer) will be able to automatically configure  
themselves and the modules would need (again) only to specify library  
mappings to the component class resolver.


What do you think?

Cheers,
Ognen
--
Ognen Ivanovski | ognen.ivanovski [at] netcetera.com.mk
phone +389 -2- 30 64 532 | fax +389 -2- 30 79 495
Netcetera | 1000 Skopje | Macedonia | http://netcetera.com.mk



-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



Grid inside a form (with checkboxes)

2007-08-24 Thread Ognen Ivanovski
 
(WebApplicationHandler.java:334)
   at org.mortbay.jetty.servlet.WebApplicationHandler.dispatch 
(WebApplicationHandler.java:286)
   at org.mortbay.jetty.servlet.ServletHandler.handle 
(ServletHandler.java:567)

   at org.mortbay.http.HttpContext.handle(HttpContext.java:1807)
   at org.mortbay.jetty.servlet.WebApplicationContext.handle 
(WebApplicationContext.java:526)

   at org.mortbay.http.HttpContext.handle(HttpContext.java:1757)
   at org.mortbay.http.HttpServer.service(HttpServer.java:879)
   at org.mortbay.http.HttpConnection.service(HttpConnection.java:789)
   at org.mortbay.http.HttpConnection.handleNext(HttpConnection.java: 
960)

   at org.mortbay.http.HttpConnection.handle(HttpConnection.java:806)
   at org.mortbay.http.SocketListener.handleConnection 
(SocketListener.java:218)

   at org.mortbay.util.ThreadedServer.handle(ThreadedServer.java:331)
   at org.mortbay.util.ThreadPool$PoolThread.run(ThreadPool.java:520)
Caused by: org.apache.tapestry.ioc.internal.util.TapestryException:  
Failure reading parameter source of component  
Page2Role:permissiondisplay.grid.columns.loop: Failure reading  
parameter model of component Page2Role:permissiondisplay.grid:  
java.lang.NullPointerException [at classpath:org/apache/tapestry/ 
corelib/components/GridColumns.html, line 3, column 116]
   at  
org.apache.tapestry.internal.structure.InternalComponentResourcesImpl.re 
adParameter(InternalComponentResourcesImpl.java:210)
   at org.apache.tapestry.corelib.components.Loop._ 
$read_parameter_source(Loop.java)
   at org.apache.tapestry.corelib.components.Loop.setupForVolatile 
(Loop.java:265)
   at org.apache.tapestry.corelib.components.Loop.access$100 
(Loop.java:46)
   at org.apache.tapestry.corelib.components.Loop$2.execute 
(Loop.java:69)
   at org.apache.tapestry.corelib.components.Loop$2.execute 
(Loop.java:70)
   at org.apache.tapestry.corelib.components.Form.onAction(Form.java: 
364)

   ... 42 more
Caused by: org.apache.tapestry.ioc.internal.util.TapestryException:  
Failure reading parameter model of component  
Page2Role:permissiondisplay.grid: java.lang.NullPointerException [at  
classpath:org/apache/tapestry/corelib/components/GridColumns.html,  
line 3, column 116]
   at org.apache.tapestry.internal.bindings.PropBinding.get 
(PropBinding.java:58)
   at  
org.apache.tapestry.internal.structure.InternalComponentResourcesImpl.re 
adParameter(InternalComponentResourcesImpl.java:204)

   ... 48 more
Caused by: org.apache.tapestry.ioc.internal.util.TapestryException:  
Failure reading parameter model of component  
Page2Role:permissiondisplay.grid: java.lang.NullPointerException
   at  
org.apache.tapestry.internal.structure.InternalComponentResourcesImpl.re 
adParameter(InternalComponentResourcesImpl.java:210)
   at org.apache.tapestry.corelib.components.Grid._ 
$read_parameter_model(Grid.java)
   at org.apache.tapestry.corelib.components.Grid.getDataModel 
(Grid.java:228)
   at  
org.apache.tapestry.corelib.components.GridColumns.getColumnNames 
(GridColumns.java:122)
   at $PropertyConduit_1149850820d.get 
($PropertyConduit_1149850820d.java)
   at org.apache.tapestry.internal.bindings.PropBinding.get 
(PropBinding.java:54)

   ... 49 more
Caused by: java.lang.NullPointerException
   at org.apache.tapestry.corelib.components.Grid$1.get(Grid.java:158)
   at  
org.apache.tapestry.internal.structure.InternalComponentResourcesImpl.re 
adParameter(InternalComponentResourcesImpl.java:204)

   ... 54 more
--
Ognen Ivanovski | [EMAIL PROTECTED]
phone +389 -2- 30 64 532 | fax +389 -2- 30 79 495
Netcetera | 1000 Skopje | Macedonia | http://netcetera.com.mk




-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



Re: T5 Type to ValueEncoderFactory

2007-08-22 Thread Ognen Ivanovski


On 2007-08-16, at 05:10, Nick Westgate wrote:


Indeed. Hence the JIRA.

Howard has mentioned the possibility of merging the two type  
coercion systems.


That Would be great!

What I currently do to seamlessly use Entities across the framework  
(activation / deactivation, parameters, RadioGroup / Radio:


- I have a service

public interface EntityCoercionConfigurator {

  void configureEntityCoercions(ConfigurationCoercionTuple?, ?  
configuration);
  void configureEntityValueEncoders(MappedConfigurationClass,  
ValueEncoderFactory configuration);


Which discovers all registered Entities (JPA, Hibernate).

It is then used in

public void contributeTypeCoercer(
@Inject EntityCoercionConfigurator configurator,
ConfigurationCoercionTuple configuration)  {
  configurator.configureEntityCoercions(configuration);
}

This gives me the String - Entity and Entity - String coercions I  
need. So far so good!


What I don't like is that I also have to

public void contributeValueEncoderSource(
@Inject EntityCoercionConfigurator configurator,
MappedConfigurationClass, ValueEncoderFactory configuration) {
  configurator.configureEntityValueEncoders(configuration);
}

Which currently instantates a ValueEncoderFactory that produces just  
one ValueEncoder that routes all toClient() and toValue() calls to  
the type coercer.


This is not that bad but I'd like to leave out the second step. :)

P.S. It might be good that such code finds it's place in tapestry- 
hibernate. I'd be glad to contribute it if there is interest for that.


Cheers,
Ognen

--
Ognen Ivanovski | [EMAIL PROTECTED]
phone +389 -2- 30 64 532 | fax +389 -2- 30 79 495
Netcetera | 1000 Skopje | Macedonia | http://netcetera.com.mk




-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



Re: T5: component libraries

2007-08-08 Thread Ognen Ivanovski


On 2007-08-08, at 17:09, Chris Lewis wrote:

Don't get me wrong I much prefer convention over configuration, but  
is it still possible to declare/include 3rd party component  
libraries? If so, how?


Step 1: Declare the module builder class in the MANIFEST.MF if your  
component library jar. It should look like:


Tapestry-Module-Classes: org.example.mylib.LibModule

(how to do that: http://tapestry.apache.org/tapestry5/tapestry-ioc/ 
module.html)


Step 2: have the packages

org.example.mylib.components
org.example.mylib.base (optional)
org.example.mylib.pages (optional)

ready.

Step 3: In org.example.mylib.LibModule have the following method:

public void contributeComponentClassResolver 
(ConfigurationLibraryMapping config) {

  config.add(new LibraryMapping(mylib, org.example.mylib));
}

And you are done. Can't be simpler ;)

--
Ognen Ivanovski | [EMAIL PROTECTED]
phone +389 -2- 30 64 532 | fax +389 -2- 30 79 495
Netcetera | 1000 Skopje | Macedonia | http://netcetera.com.mk




-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



Re: T5: component libraries

2007-08-08 Thread Ognen Ivanovski


On 2007-08-08, at 17:31, Chris Lewis wrote:

Not sure I agree with that! Thank you very much for showing how its  
done. Is there discussion on the website about the method  
contributeComponentClassResolver, for the service that it seems  
to imply (ComponentClassResolver)?


Yes, you have to read the docs on http://tapestry.apache.org/ 
tapestry5/tapestry-ioc/ in order to see how services are declared,  
wired up and contributed to. After you go through it, the example I  
gave will look quite obvious [you have to know the conventions in  
order for them to work].




thanks again


No prob.

--
Ognen Ivanovski | [EMAIL PROTECTED]
phone +389 -2- 30 64 532 | fax +389 -2- 30 79 495
Netcetera | 1000 Skopje | Macedonia | http://netcetera.com.mk




-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



Re: T5: component libraries

2007-08-08 Thread Ognen Ivanovski


On 2007-08-08, at 18:05, Chris Lewis wrote:

I've read it and am reading it again, but where did you read about  
that specific service?


Ah, the service :)

The sources. First thing I wanted to know is how to do component  
libraries, so I dug around until I found it.


--
Ognen Ivanovski | [EMAIL PROTECTED]
phone +389 -2- 30 64 532 | fax +389 -2- 30 79 495
Netcetera | 1000 Skopje | Macedonia | http://netcetera.com.mk




-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



[T5] ValueEncoder = TypeCoercer?

2007-08-01 Thread Ognen Ivanovski

Hello again,

I'm trying to write a CheckboxGroup / Checkbox pair of components for  
my project based on the RadioGroup / Radio components in the corelib.


While doing so I stumbled upon the ValueEncoder / ValueEncoderSource  
and I keep wondering why are they introduced and why isn't the type  
coercion used instead (objectType - string, string - objectType)?


Also in this direction, it would be good if one can contribute more  
dynamic type coercion configuration. E.g. if one uses Hibernate, one  
could contribute just one coercion handler that can turn any @Entity  
into a string and back (using the entity's declared @Id properties).


This would greatly simplify Radio's, Checkboxes, Selects and the like.

Cheers,
Ognen

--
Ognen Ivanovski | [EMAIL PROTECTED]
phone +389 -2- 30 64 532 | fax +389 -2- 30 79 495
Netcetera | 1000 Skopje | Macedonia | http://netcetera.com.mk




-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



[T5] Specifying parameters in templates (apropos if / else)

2007-07-25 Thread Ognen Ivanovski

I often look at:

 t:if test=
   ...
   t:parameter name=else
  
   /t:parameter
 /t:if

and think if there could be a better (and yet generic) way to express  
this.


The only thing that comes to my mind is to use another namespace  
(with prefix p) and then  do something like:


 t:if test=
   ...
   p:else
  
   /p:else
 /t:if

Of course this can easily confuse. One that doesn't know that else is  
a parameter to the component if, would expect more that both 'if' and  
'else' belong to the same namespace. Yet using the t prefix also for  
parameters will easily overload component types.


Just a thought comes back over and over again... What do you think?


--
Ognen Ivanovski | [EMAIL PROTECTED]
phone +389 -2- 30 64 532 | fax +389 -2- 30 79 495
Netcetera | 1000 Skopje | Macedonia | http://netcetera.com.mk




-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



[T5] navigation component

2007-07-16 Thread Ognen Ivanovski

Hi everyone,

I am trying to build up a T5 navigation component. The general idea is:

 - it should figure out the navigational tree based on the pages  
available around
 - Showing a page in the navigational component should be a matter  
of tagging a component with an annotation (@Navigable, or  
@ShowsInNavigation)
	 - Additional info (i.e. display text, icon, etc..) also from  
annotation

- The grouping of pages should be based on sub packages in the *.pages)
	- package-info.java would be used for annotating the groups (text,  
icons)




So here are the questions:

1) How can I iterate through all pages present in an app?

2) How can I access the annotations on a Page class. I saw the  
Component / ComponentModel interfaces but they do not offer access to  
the annotations. Perhaps the @Meta annotation can help here but I  
don't want to limit myself to strings.



--
Ognen Ivanovski | [EMAIL PROTECTED]
phone +389 -2- 30 64 532 | fax +389 -2- 30 79 495
Netcetera | 1000 Skopje | Macedonia | http://netcetera.com.mk




-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]