John S.

A technique that I used (I think I understand your question) is to have a eomodel object called "parameters" with fields parameterKey and parameterValue.  Then I put whatever various parameters I want to use in there.  Then I have a static method in a Util class that is something like String getParameterValue(String key) {code to get value from db;}

Anyhow, I found myself putting parameters like "WOClassForOrderLines" and other things that have to do with run-time execution.  I suppose that this is a lot like what David was talking about at the end.  You could do the same thing and have a parameter called cssClassForInvoiceLines.  Then when the 3rd party changes the style name for the invoice lines, you can change the value in the database for cssClassForInvoiceLines entry and not have to recompile your project.

John L.

On Jun 15, 2006, at 6:19 AM, John Stewart wrote:

Thanks guys,

I'm working from a third-party css set, and trying to plan ahead for the possibility of that changing, while interface logic stays the same.  However, I'll just have to bite the bullet and accept that my Java code has to know what's in there!

John

On 6/14/06, David Masters <[EMAIL PROTECTED]> wrote:
John,

On 14 Jun 2006, at 12:54, John Stewart wrote:

> If I create a ul wrapper "styleContainer" as below, I'd like to
> include the "open" or "closed" styles, as well as a common "clear"
> style.
>
> The output would be of the form:
>
> <!-- isOpen = true: -->
>  <ul class="clear open">
>    <li>...</li>
>  </ul>
>
>
> <!-- isOpen = false: -->
>  <ul class="clear closed">
>    <li>...</li>
>  </ul>

One approach (as I think David LeBer mentioned) is to avoid the use
of conditionals in the WOComponent with the use of
WOGenericContainers, and a method in the .java file to return the
class name as a String. For example, create a generic container with
the element name of 'ul' and bind its (css) class to the method.

In .html:

        <webobject name="Generic1">
                ...list repetition goes here...
        </webobject>

In .wod:

        Generic1: WOGenericContainer
        {
                elementName = "ul";
                class = classForList;
        }

In .java:

     public String classForList()
     {
                return ...test... ? "clear open" : "clear closed";
     }

This technique avoids the fragile editing problem in WOBuilder that
you mentioned, and keeps the WOComponent relatively clean and tidy -
no nested conditionals, for example.

> To further complicate things, what if I want more than 2 alternative
> styles, e.g. fed by an integer instead of a boolean?

The method can be easily extended to cope with any number of tests
and styles - I personally find it easier to cope with the logic in
the .java file than with nested WOConditionals in the .html file.

> Or is this one of WO's limitations where I have to include style names
> in the Java code?

As others have mentioned, only if you think this is a limitation :-).
Personally I don't think there's anything wrong with the .java file
returning the css class name - I think of the .wo and .java files as
acting as controller/view classes.

Another technique we often use - particularly for cases where the
style is dependent on some attribute, such as a status flag, of an
item - is to return a class name based on an internal typecode.

For example, if we have a 'New' status option, in the database we
have a column for typecode, which in this case might be 'new'. These
typecodes never change, whereas the descriptive title might; and
they're always lowercase, with no spaces to avoid problems later on.
Then a classForItem method can simply return something like:

        return "list_item_" + item.typecode();

We then have css styles for "list_item_new", "list_item_old", and so
on. Makes it trivial to, say, color code items in a list based on the
status of that item; avoids having any conditionals in the .java
file; and if there is a new status option added to the database there
are no changes required in the .java code: only the addition of a new
style in the .css file with the appropriate list_item_ name.

Hope this helps!

David


David Masters, Software Imagineer
[EMAIL PROTECTED]

Web: http://www.pyrusmalus.com    Tel: +44 141 427 9649    Fax: +44
141 427 1740

P y r u s M a l u s   |   d e s i g n   |   d e v e l o p   |   d e l
i v e r   |   c o n s u l t   |   t r a i n   |   s u p p o r t   |




 _______________________________________________
Do not post admin requests to the list. They will be ignored.
Webobjects-dev mailing list      ([email protected])
Help/Unsubscribe/Update your Subscription:

This email sent to [EMAIL PROTECTED]

 _______________________________________________
Do not post admin requests to the list. They will be ignored.
Webobjects-dev mailing list      ([email protected])
Help/Unsubscribe/Update your Subscription:
http://lists.apple.com/mailman/options/webobjects-dev/archive%40mail-archive.com

This email sent to [email protected]

Reply via email to