Probably dangerous but nice...or,
probably nice but dangerous ;-)

Anyway, perhaps this can find its way in our wiki.
http://wiki.apache.org/tapestry/

On 4/6/07, Drew McAuliffe <[EMAIL PROTECTED]> wrote:

You can also do what I did and just contribute a brand new expression
evaluator:
public class NullSafeExpressionEvaluator extends ExpressionEvaluatorImpl
{
    private static Logger log = Logger.getLogger(
NullSafeExpressionEvaluator.class);
    private static final String START_BRACKET = "{";
    private static final String ESCAPED_BRACKET = START_BRACKET;
    private static final String END_BRACKET = ESCAPED_BRACKET;
    public Object readCompiled(Object target, Object expression){
        Object result = null;
        try{
            result = super.readCompiled(target, expression);
        }
        catch (ApplicationRuntimeException e){
            if (!(e.getRootCause() instanceof NullPointerException))
                result = "";
            // don't do anything!
        }
        return result;
    }
}

HIVEMIND:
<!--  override OGNL evaluator to use more null friendly one -->
<implementation service-id="tapestry.ognl.ExpressionEvaluator">
    <invoke-factory>
      <construct class="com.mypackage.NullSafeExpressionEvaluator">
        <set-object property="applicationSpecification"
value="infrastructure:applicationSpecification"/>
        <set-configuration property="contributions"
configuration-id="PropertyAccessors"/>
        <set-configuration property="nullHandlerContributions"
configuration-id="NullHandlers"/>
      </construct>
    </invoke-factory>
</implementation>


On 1/31/07, andyhot <[EMAIL PROTECTED]> wrote:
>
> Gentry, Michael (Contractor) wrote:
> > I get an error trying to contribute to tapestry.ognl.NullHandlers ...
> > Is that available in T4?  Thanks!
> >
>
> Damn, that's 4.1 only...
> If you're on 4.0.x, you can still do this, but you'll have to register
> the handlers on your own.
>
> You just have to call OgnlRuntime's static method at a convenient time,
> i.e. on app startup
>
> OgnlRuntime.setNullHandler(subjectClass, handler);
>
> That's exactly what happens in
>
>
http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/services/impl/ExpressionEvaluatorImpl.java?view=markup
>
>
>
> >
> > The electronic mail message you have received and any files
transmitted
> > with it are confidential and solely for the intended addressee(s)'s
> > attention. Do not divulge, copy, forward, or use the contents,
> > attachments, or information without permission of Fannie Mae.
> > Information contained in this message is provided solely for the
purpose
> > stated in the message or its attachment(s) and must not be disclosed
to
> > any third party or used for any other purpose without consent of
Fannie
> > Mae. If you have received this message and/or any files transmitted
with
> > it in error, please delete them from your system, destroy any hard
> > copies of them, and contact the sender.
> >
> >
> > -----Original Message-----
> > From: andreas a [mailto:[EMAIL PROTECTED] On Behalf Of andyhot
> > Sent: Tuesday, January 30, 2007 12:15 PM
> > To: Tapestry users
> > Subject: Re: Tapestry prop: suggestion (or question)
> >
> > Gentry, Michael (Contractor) wrote:
> >
> >> I've downloaded and tried out the prop: prefix extension from HLS.
> >>
> > One
> >
> >> thing I was *really* hoping for, compared to OGNL, is that it would
> >> ignore null pointers, at least on reads.
> >>
> >
> > OGNL has a feature called NullHandlers
> >
> > You contribute one to configuration point tapestry.ognl.NullHandlers
> > like this
> > <null-handler class="class.having.null.properties"
> > object="instance:org.MyNullHandler"/>
> >
> > where MyNullHandler implements
> > http://www.ognl.org/2.6.9/Documentation/javadoc/ognl/NullHandler.html
> >
> > So, if you have a RegisterPage that contains a path like
> > user.department.name you have
> > to register null handlers (could be the same one) for the following :
> > RegisterPage (cause its user may be null),
> > User (cause his department may be null)
> >
> >
> >
> >
> >
> >> I have report-type pages
> >> (read-only) where I can sometimes have thousands of rows with 10-15
> >> columns.  Each of those columns currently has bulky cover methods
> >>
> > which
> >
> >> do NPE protection in case a relationship is missing (the actual
values
> >> almost always come from a dotted path: foo.bar.baz.status, and OGNL
> >>
> > will
> >
> >> blow up if "bar" is null).  I was hoping the prop: extension would
> >> handle this, but it seems to work just like OGNL if it hits a null.
> >>
> > If
> >
> >> something doesn't exist, I'm pretty happy with just getting a null
> >>
> > back
> >
> >> and displaying nothing.
> >>
> >> I played with the code a bit and this seems to work if you edit
> >> PropertyAccessorBinding.java and change the getObject() method:
> >>
> >>     public Object getObject()
> >>     {
> >>         return _accessor.readProperty();
> >>     } <http://www.len.ro/work/articles/tapestry-ajax-application-1/>
> >>
> >> to:
> >>
> >>     public Object getObject()
> >>     {
> >>       try
> >>       {
> >>         return _accessor.readProperty();
> >>       }
> >>       catch (NullPointerException exception)
> >>       {
> >>         // Ignore NPE on reads ...
> >>         return null;
> >>       }
> >>     }
> >>
> >> A) Does this seem like a reasonable thing to do?
> >> B) If yes to A, could it maybe be included in the actual prop:
package
> >> (would beat maintaining a separate branch).
> >>
> >> Thanks!
> >>
> >> /dev/mrg
> >>
> >> PS. I didn't alter setObject() ... I'd consider that an actual error
> >>
> > if
> >
> >> you were trying to set things through nulls.
> >>
> >>
> >> The electronic mail message you have received and any files
> >>
> > transmitted
> >
> >> with it are confidential and solely for the intended addressee(s)'s
> >> attention. Do not divulge, copy, forward, or use the contents,
> >> attachments, or information without permission of Fannie Mae.
> >> Information contained in this message is provided solely for the
> >>
> > purpose
> >
> >> stated in the message or its attachment(s) and must not be disclosed
> >>
> > to
> >
> >> any third party or used for any other purpose without consent of
> >>
> > Fannie
> >
> >> Mae. If you have received this message and/or any files transmitted
> >>
> > with
> >
> >> it in error, please delete them from your system, destroy any hard
> >> copies of them, and contact the sender.
> >>
> >>
> >>
> >>
> >>
> >>
> >
> >
> >
>
>
> --
> Andreas Andreou - [EMAIL PROTECTED] - http://andyhot.di.uoa.gr
> Tapestry / Tacos developer
> Open Source / J2EE Consulting
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
>
>




--
Andreas Andreou - [EMAIL PROTECTED] - http://andyhot.di.uoa.gr
Tapestry / Tacos developer
Open Source / JEE Consulting

Reply via email to