This is a topic that was discussed back in 2011, but my searches haven’t turned 
up a satisfactory solution.

Some quick background info, we have information-dense, complex pages, and there 
are a variety of permission levels for internal and external users that needed 
to be implemented at field-level granularity.

My approach was to create a method for determining edit-ability in the 
superclass for each area’s components that maps permission level with field 
name:

    public boolean editingEnabledByField( String field )

… which I’m calling using WOOgnl in WOConditionals as the condition and in 
custom components like this:

   <wo:OurCustomComponent 
editingEnabled="~editingEnabledByField(\”thisFieldName\")" expanded="$true" />

This actually works fine as far as the functionality goes. The issue is our 
logs get filled with warnings that look like error messages, one for every 
field for every page hit. Since the bindings on these pages are synchronized, 
the log messages apparently occur when the value of “editingEnabled” tries to 
get pushed into “editingEnabledByField(”thisFieldName”)”, which obviously isn’t 
possible. (So getting the value from the ognl expression works fine, setting to 
the ognl expression does not.)

In 2011 Mike Schrag wrote about almost this exact same question:

> this seems wrong to me ... it's not the ognl is intrinsically unsettable it's 
> that you're trying to set a value on an ognl expression that definitely ISN'T 
> settable. either you should turn off automatic binding synchronization on 
> SelectByCharacterPopupEditField and manually sync, or this patch should maybe 
> be smarter about how it determines "setability" in ognl. i would be afraid of 
> breaking anyone who might be taking advantage of settable ognl expressions. i 
> don't, offhand, know how to perform that check -- whether ognl has API to do 
> it or if it's even possible.

The patch he was referring to was:

     public WOOgnlAssociation(String s) {
         super(s);
         _isValueSettable = false;
     }

… which is a sledgehammer approach that probably wouldn’t be applicable in 
general. However, picking up from where Stefan left off there, perhaps this is 
at least a partial solution (that I think will work for my case anyway):

        public WOOgnlAssociation(String s) {
                super(s);
                if( s != null && s.matches( ".+\\(.*\\S.*\\)" ) ) {
                        _isValueSettable = false;
                }
        }

This regex checks to see if there’s a method call with some sort of parameter 
(by looking for something followed by “(“ followed by some non-whitespace 
followed by “)”).

Does this seem reasonable? Any counterexamples where a matching key path should 
be settable? I know that ognl expressions can include parentheses as well, but 
I would think those also would not be settable, right?

Thanks for any tips or advice!

Regards,
Mark
 _______________________________________________
Do not post admin requests to the list. They will be ignored.
Webobjects-dev mailing list      (Webobjects-dev@lists.apple.com)
Help/Unsubscribe/Update your Subscription:
https://lists.apple.com/mailman/options/webobjects-dev/archive%40mail-archive.com

This email sent to arch...@mail-archive.com

Reply via email to