Eclipse Community Forums - RDF feed
https://www.eclipse.org/forums/
Eclipse Community ForumsPassing Java objects by reference
https://www.eclipse.org/forums/index.php/mv/msg/9442/29033/#msg_29033
Previously when using JET1 i used the <%@include %> directive to insert
code into the java code for the template.
I was naturally using scriplets to aid with processing, and the
parameterization of my "included" template consisted of making sure I used
the same variable names consistently before invoking the included template
E.g.
myIncludedTemplate.jetInc:
<%=config.getName()%>
myMain.jet
<%Config config = genModel.getConfig();%>
<%@ include file="myIncludedTemplate.jetInc"%>
I have been experimenting with the control tag <c:include/> but the only
way I seem to have of passing Objects by reference is by explicitly
setting the implicit context object's map of variables;
<%config.setVariable("config", config)%>
Is there any other way of passing values by reference?
Does the template complier do any "magic" with variables as in JSP2.0 ?
Can I develope a Custom Tag which takes Java Object references set at
runtime as values for its attributes ? Are there any tutorials on
developing a JET custom tag library?
Thanks]]>J F2007-07-26T12:23:48-00:00Re: Passing Java objects by reference
https://www.eclipse.org/forums/index.php/mv/msg/9442/29110/#msg_29110
Short answer: There isn't any easy way to pass Java objects by reference.
Some explanation: My initial bias has been that Java in templates is not a
good idea. In my mind, a good template primarily expresses the domain of the
template, with only small markups for substitution and control. A bit of
Java is alright, but it is very easy for it to get out of control.
My bias, of course, has affected what functionality is included. For
example, the tag library support doesn't include any JSP 2.0-like abilities
to define variables, and, as you have noted, it is hard to integrate Java
objects with the tags at all.
Having said that, I am open to ideas of improving support for Java, and how
it interacts with tags. Some ideas I have had (but not refined) are:
1) allow the declaration of template arguments, and the corresponding
invocation of templates by explicitly passing these arguments. Ideally, this
should include some option for specifying the Java type, and whether a Java
variable would be created.
2) allow a custom tag to cause the compiler to create or set a Java variable
based on a context value.
I'm open to all ideas (and, even better, contributed implementations).
Paul
"JF" <jfrancis@his.co.uk> wrote in message
news:ec8ad77bfbba70ae745d8a5c30173f02$1@www.eclipse.org...
> Hi,
>
> Previously when using JET1 i used the <%@include %> directive to insert
> code into the java code for the template.
> I was naturally using scriplets to aid with processing, and the
> parameterization of my "included" template consisted of making sure I used
> the same variable names consistently before invoking the included template
> E.g.
>
> myIncludedTemplate.jetInc:
>
> <%=config.getName()%>
>
>
> myMain.jet
>
> <%Config config = genModel.getConfig();%>
> <%@ include file="myIncludedTemplate.jetInc"%>
>
> I have been experimenting with the control tag <c:include/> but the only
> way I seem to have of passing Objects by reference is by explicitly
> setting the implicit context object's map of variables;
>
> <%config.setVariable("config", config)%>
>
> Is there any other way of passing values by reference?
> Does the template complier do any "magic" with variables as in JSP2.0 ?
> Can I develope a Custom Tag which takes Java Object references set at
> runtime as values for its attributes ? Are there any tutorials on
> developing a JET custom tag library?
>
> Thanks
>]]>Paul Elder2007-07-26T14:27:09-00:00Re: Passing Java objects by reference
https://www.eclipse.org/forums/index.php/mv/msg/9442/29300/#msg_29300
different angle with JET1 code.
Either of your 2 ideas for improving Java support would be useful.
The most useful thing about the JET Editors is their ability to feedback (
syntax colour highlighting ) so an approach that keeps that ability is
most useful. I think adding parameters to a template would be useful and
could be made to work as a STATIC compilation time feature
to aid Java like type safety and error feedback in the editor to us Java
programmers;
So we might introduce a new directive
<%@ param="name" type="java.lang.String" %>
<%@ param="config" type="myPackage.Config" %>
which would then emit java code as follows:
public void generate(final JET2Context context, final JET2Writer __out) {
String name=(String)context.getVariable("name");
Config config=(Config)context.getVariable("config");
If this definition was stored in the Eclipse Registry then you can imagine
a template creator calling a KNOWN template at development time as follows:
By only allowing expressions as parameters it should be easier to just
"dump" the java code.
If the User passes the incorrect types for these values then they would
get appropriate feedback as normal, and resticting parameters to be Java
expressions simplifies the work that has to be done.
I'm working round the problem by using context.setVariable and getVariable
at the momment, and don't have enough time to do the work, but perhaps you
could suggest where I might start implementing this when I get the time;
I see you use JET to write the parser/compiler itself is there an easy way
in there... the addition of stuff to the Eclipse Registry and extension
points extension should be easier for me.