Ok here is a real situation:
take the party/widgets/partymgr/commicationsscreens.xml
<decorator-screen name="CommonCommunicationEventDecorator"
location="${parameters.mainDecoratorLocation}">
which is the CommonSreens.xml
which has
<decorator-screen name="main-decorator"
location="${parameters.mainDecoratorLocation}">

the main-decorator has
                <include-screen name="GlobalDecorator"
location="component://common/widget/CommonScreens.xml"/>


how would the be with your example



Adrian Crum sent the following on 12/17/2007 9:33 AM:
> BJ,
> 
> Go ahead and create one. I will work on it when I have time.
> 
> To be sure we're all on the same page, the problem exists when screens
> are nested as follows:
> 
> <screen name="GlobalDecorator">
>   <screen name="main-decorator">
>     <screen name="sub-decorator">
>       <screen name="actual-content">
>         ...
>       </screen>
>     </screen>
>   </screen>
> </screen>
> 
> and the location of the sub-decorator screen is defined as
> ${parameters.mainDecoratorLocation}. When a custom app tries to reuse
> the actual-content screen, errors are generated because
> <decorator-screen name="sub-decorator"
> location="${parameters.mainDecoratorLocation}"> evaluates to the custom
> app's main decorator xml file, and the sub-decorator screen doesn't
> exist there.
> 
> The solution to the problem is to avoid using
> ${parameters.mainDecoratorLocation} as a location for sub-decorators and
> either have no location specified or use a different parameter for the
> sub-decorator's location - like ${subDecoratorLocation}.
> 
> A good example of this approach is in AgreementScreens.xml in the
> Accounting component. All of the Agreement screens share a common
> sub-decorator (CommonAgreementDecorator) - and that decorator's location
> is specified as ${parameters.agreementDecoratorLocation}. The
> agreementDecoratorLocation parameter isn't defined anywhere, so the
> location= expression evaluates to an empty String - which causes the
> screen widget view handler to look for CommonAgreementDecorator in the
> existing file.
> 
> A custom app that reuses one of the Agreement screens will only need to
> specify the mainDecoratorLocation parameter. Since no
> agreementDecoratorLocation parameter is defined in the custom app, the
> sub-decorator in AgreementScreens.xml is used (same as above). If a
> custom app wanted to have a custom sub-decorator, then it can specify
> that decorator's location in the agreementDecoratorLocation parameter.
> 
> -Adrian
> 
> BJ Freeman wrote:
> 
>> I agree, it is not a controller or web.xml issue. However it is when it
>> shows up.
>> I will change them as I come along also.
>> thanks, that is all I wanted to know.
>> do you want to create a jira so I can submit changes?
>>
>> Adrian Crum sent the following on 12/17/2007 7:57 AM:
>>
>>> As I mentioned before, the problem is with the coding style on some
>>> screens, not with the controller or web.xml files. I recently changed
>>> some of the accounting screens to correct this error.
>>>
>>> -Adrian
>>>
>>> BJ Freeman wrote:
>>>
>>>
>>>> I am not really, trying to attach the context as a whole.
>>>> only trying to get the mainDecoratorLocation
>>>> which is stored as a context in web.xml.
>>>> The problem is if I put mainDecoratorLocation, in my web.xml
>>>> then all applications I call thru my controller, or the included ones,
>>>> will use my mainDecoratorLocation full path.
>>>> Maybe the solution is to put the main-decorator for all apps in the
>>>> framework/commons
>>>> then like in many of the application they have specific decorators that
>>>> include the main-decorator.
>>>> the problems is how to fill in the actions, etcetera
>>>>
>>>> Chris Howe sent the following on 12/15/2007 10:40 AM:
>>>>
>>>>
>>>>> All the <include> does is grab some xml elements from the location
>>>>> described.  Theoretically, It doesn't even need to be from the same
>>>>> server, much less the same app (may have interesting possibilities
>>>>> BTW).  This is why I'm having such a hard time understanding why you
>>>>> are trying to attach context to it.
>>>>>
>>>>> ----- Original Message ----
>>>>> From: BJ Freeman <[EMAIL PROTECTED]>
>>>>> To: dev@ofbiz.apache.org
>>>>> Sent: Saturday, December 15, 2007 12:19:27 PM
>>>>> Subject: Re: Include of controllers
>>>>>
>>>>>
>>>>> I was going thru the trunk and noticed this in all the controllers
>>>>>   <include
>>>>> location="component://common/webcommon/WEB-INF/common-controller.xml"/>
>>>>>
>>>>>
>>>>> so there is a rule that says you can include a controller not in the
>>>>> same app.
>>>>>
>>>>>
>>>>> BJ Freeman sent the following on 11/10/2007 4:15 PM:
>>>>>
>>>>>
>>>>>> Almost.
>>>>>> when the included controller view calles a screen in the partymgr
>>>>>
>>>>> screen
>>>>>
>>>>>
>>>>>> , and that screen calls for a parm that is web.xml. the parm is not
>>>>>> availible for the screen and so fails.
>>>>>>
>>>>>> At this time, the way I handle this is to put the parm in my Web.xml.
>>>>>>
>>>>>> My suggestions was that if a call is made to a parm that would be in
>>>>>
>>>>> the
>>>>>
>>>>>
>>>>>> applications, in this case partymgr, web.xml, that widget looks up
>>>>>
>>>>> the
>>>>>
>>>>>
>>>>>> web.xml for that application to get it.
>>>>>>
>>>>>>
>>>>>> Chris Howe sent the following on 11/10/2007 2:23 PM:
>>>>>>
>>>>>>
>>>>>>> Okay, I've read through the thread.  In that case, I might suggest
>>>>>
>>>>> to take a step back and look at what the two functionalities were
>>>>> designed to accomplish.
>>>>>>> Creating the mainDecoratorLocation variable in the web.xml was
>>>>>
>>>>> designed for _screen reuse. the include element in the controller.xml
>>>>> file
>>>>> was designed for request/response maintenance.
>>>>>>> With that in mind, you can include another controller in your custom
>>>>>
>>>>> application and then override the view with one that points to your
>>>>> application.   If you wish to then include a screen from another
>>>>> application you can use the <include-screen> element in the screen
>>>>> widget and
>>>>> at the same time pass a parameters.mainDecoratorLocation to
>>>>> override the
>>>>> one gained from the web.xml context of the webapp being used.
>>>>>
>>>>>
>>>>>>> It appears that what BJ is suggesting would make the screen being
>>>>>
>>>>> called from the ofbiz application nonreusable except as decorated
>>>>> as it
>>>>> is in the ofbiz project which defeats the entire purpose of the
>>>>> mainDecoratorLocation variable.  Do I follow correctly?
>>>>>
>>>>>
>>>>>>> ----- Original Message ----
>>>>>>> From: BJ Freeman <[EMAIL PROTECTED]>
>>>>>>> To: dev@ofbiz.apache.org
>>>>>>> Sent: Saturday, November 10, 2007 2:12:12 PM
>>>>>>> Subject: Re: Include of controllers
>>>>>>>
>>>>>>> Chris the discussion is about using the include in the controller.
>>>>>>> and that the current way of putting the locations of parameters used
>>>>>
>>>>> in
>>>>>
>>>>>
>>>>>>> the widgets for screen decorators is causing a problem
>>>>>>> In a lot of apps the location is called out in the web.xml
>>>>>>> <context-param>
>>>>>>> <param-name>mainDecoratorLocation</param-name>
>>>>>>>
>>>>> <param-value>component://party/widget/partymgr/CommonScreens.xml</param-value>
>>>>>
>>>>>
>>>>>
>>>>>>>    <description>The location of the main-decorator screen to use
>>>>>
>>>>> for
>>>>>
>>>>>
>>>>>>> this webapp; referred to as a context variable in screen def XML
>>>>>>> files.</description>
>>>>>>>  </context-param>
>>>>>>>
>>>>>>> The suggeston is to take the location out to the web.xml and put in
>>>>>
>>>>> the
>>>>>
>>>>>
>>>>>>> widget like so.
>>>>>>>
>>>>>>> <decorator-screen name="CommonPartyDecorator"
>>>>>>> location="component://party/widget/partymgr/CommonScreens.xml">
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> Chris Howe sent the following on 11/9/2007 9:14 PM:
>>>>>>>
>>>>>>>
>>>>>>>> I haven't been following the thread, but instead of setting it
>>>>>>>
>>>>>>> explicitly in the widgets section, you may prefer to define it in
>>>>>
>>>>> the actions
>>>>>
>>>>>
>>>>>>> section...
>>>>>>>
>>>>>>>
>>>>>>>> <action>
>>>>>>>>  <set field="parameters.mainDecoratorLocation"
>>>>>>>
>>>>>>> value="component://party/widget/partymgr/CommonScreens.xml"/>
>>>>>>>
>>>>>>>> </action>
>>>>>>>> <widget>
>>>>>>>>  <include-screen name="splitScreen"/>
>>>>>>>> </widget>
>>>>>>>> ...
>>>>>>>> <decorator-screen name="CommonPartyDecorator"
>>>>>>>
>>>>>>> location="${parameters.mainDecoratorLocation}">
>>>>>>>
>>>>>>>> <screen name="splitScreen">
>>>>>>>> ...
>>>>>>>> <widget>
>>>>>>>>
>>>>>>>> </widget>
>>>>>>>> ...
>>>>>>>> or something similar that it remains a variable so that you can
>>>>>
>>>>> later
>>>>>
>>>>>
>>>>>>> split the widget section out to be it's own screen so that it can
>>>>>
>>>>> be
>>>>>
>>>>>
>>>>>>> used with the decorator in another webapp.  I don't know if the
>>>>>
>>>>> screens
>>>>>
>>>>>
>>>>>>> you're worried  about here are that complex.  This has been a
>>>>>
>>>>> better
>>>>>
>>>>>
>>>>>>> pattern for me.
>>>>>>>
>>>>>>>
>>>>>>>> ----- Original Message ----
>>>>>>>> From: BJ Freeman <[EMAIL PROTECTED]>
>>>>>>>> To: dev@ofbiz.apache.org
>>>>>>>> Sent: Friday, November 9, 2007 9:57:00 PM
>>>>>>>> Subject: Re: Include of controllers
>>>>>>>>
>>>>>>>> Just want to make sure we are all on the same page
>>>>>>>> in a widget screen
>>>>>>>>               <decorator-screen name="CommonPartyDecorator"
>>>>>>>> location="${parameters.mainDecoratorLocation}">
>>>>>>>>
>>>>>>>> parameters.mainDecoratorLocation is in the Web.xml
>>>>>>>>
>>>>>>>> <context-param>
>>>>>>>>   <param-name>mainDecoratorLocation</param-name>
>>>>>>>>
>>>>> <param-value>component://party/widget/partymgr/CommonScreens.xml</param-value>
>>>>>
>>>>>
>>>>>
>>>>>>>>   <description>The location of the main-decorator screen to use
>>>>>
>>>>> for
>>>>>
>>>>>
>>>>>>>> this webapp; referred to as a context variable in screen def XML
>>>>>>>> files.</description>
>>>>>>>> </context-param>
>>>>>>>>
>>>>>>>> so to "fix"
>>>>>>>>               <decorator-screen name="CommonPartyDecorator"
>>>>>>>> location="component://party/widget/partymgr/CommonScreens.xml">
>>>>>>>>
>>>>>>>>
>>>>>>>> BJ Freeman sent the following on 11/9/2007 5:17 PM:
>>>>>>>>
>>>>>>>>
>>>>>>>>> Ok so the code that allows the context to be used in the web.xml
>>>>>
>>>>> is
>>>>>
>>>>>
>>>>>>>>> being depreciated?
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> Adrian Crum sent the following on 11/9/2007 5:11 PM:
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>> BJ,
>>>>>>>>>>
>>>>>>>>>> Nothing is being reversed. You have pointed out a weakness in how
>>>>>>>>
>>>>>>>> the
>>>>>>>>
>>>>>>>>
>>>>>>>>>> some of the party manager screens are set up (they can't be
>>>>>>>
>>>>>>> reused).
>>>>>>>
>>>>>>>
>>>>>>>> I
>>>>>>>>
>>>>>>>>
>>>>>>>>>> have confirmed they have a problem. So submitting a patch FIXES
>>>>>
>>>>> the
>>>>>
>>>>>
>>>>>>>>>> issue - it doesn't reverse anything.
>>>>>>>>>>
>>>>>>>>>> -Adrian
>>>>>>>>>>
>>>>>>>>>> BJ Freeman wrote:
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>> I will not submit a patch for what I am proposing, like a lot of
>>>>>>>
>>>>>>> my
>>>>>>>
>>>>>>>
>>>>>>>>>>> code, it stays in the applications I am doing.
>>>>>>>>>>> and since someone else put effort into what is in ofbiz now
>>>>>>>>>>> I do not plan to put effort into reversing it.
>>>>>>>>>>> :)
>>>>>>>>>>>
>>>>>>>>>>> Adrian Crum sent the following on 11/9/2007 4:57 PM:
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>> BJ,
>>>>>>>>>>>>
>>>>>>>>>>>> As I mentioned before, I believe it would be better/easier to
>>>>>
>>>>> fix
>>>>>
>>>>>
>>>>>>>> the
>>>>>>>>
>>>>>>>>
>>>>>>>>>>>> party manager screens. Including web.xml files will open up a
>>>>>
>>>>> big
>>>>>
>>>>>
>>>>>>>> can of
>>>>>>>>
>>>>>>>>
>>>>>>>>>>>> worms.
>>>>>>>>>>>>
>>>>>>>>>>>> -Adrian
>>>>>>>>>>>>
>>>>>>>>>>>> BJ Freeman wrote:
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>>> Hans:
>>>>>>>>>>>>> I did not put the CommonCommunicationEventDecorator location
>>>>>
>>>>> in
>>>>>
>>>>>
>>>>>>>> the
>>>>>>>>
>>>>>>>>
>>>>>>>>>>>>> context in web.xml
>>>>>>>>>>>>> this was done by someone else and is a standard through ofbiz
>>>>>
>>>>> as
>>>>>
>>>>>
>>>>>>>> far as
>>>>>>>>
>>>>>>>>
>>>>>>>>>>>>> i can tell.
>>>>>>>>>>>>> I take the path of least resistance.
>>>>>>>>>>>>> Since it is possible to put context in the web.xml and someone
>>>>>>>>
>>>>>>>> has
>>>>>>>>
>>>>>>>>
>>>>>>>>>>>>> put a
>>>>>>>>>>>>> lot of effort into refactoring ofbiz to this standard, I have
>>>>>
>>>>> no
>>>>>
>>>>>
>>>>>>>>>>>>> intention of undoing it.
>>>>>>>>>>>>>
>>>>>>>>>>>>> so my focus for my code will be to have the web.xml included
>>>>>
>>>>> as
>>>>>
>>>>>
>>>>>>>> well,
>>>>>>>>
>>>>>>>>
>>>>>>>>>>>>> unless the powers to be say there is going to be a change in
>>>>>
>>>>> the
>>>>>
>>>>>
>>>>>>>> best
>>>>>>>>
>>>>>>>>
>>>>>>>>>>>>> practices.
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>> Hans Bakker sent the following on 11/7/2007 5:47 PM:
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>>> Hi Bj,
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> request (or provide a patch) that the
>>>>>>>>>>>>>> CommonCommunicationEventDecorator
>>>>>>>>>>>>>> is moved to the xml file as defined in the web.xml parameter.
>>>>>>>>
>>>>>>>> Also
>>>>>>>>
>>>>>>>>
>>>>>>>>>>>>>> request that the 'location' parameter is defined in the
>>>>>
>>>>> screen
>>>>>
>>>>>
>>>>>>>> you are
>>>>>>>>
>>>>>>>>
>>>>>>>>>>>>>> using.
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> Then you can use this screen in your own application using
>>>>>
>>>>> your
>>>>>
>>>>>
>>>>>>>> own
>>>>>>>>
>>>>>>>>
>>>>>>>>>>>>>> decorator.
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> Regards,
>>>>>>>>>>>>>> Hans
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> On Wed, 2007-11-07 at 13:42 -0800, BJ Freeman wrote:
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> I have a controller.xml
>>>>>>>>>>>>>>> it has the include for the partymgr in it.
>>>>>>>>>>>>>>> I have a menu widget that calls the partmgr
>>>>>>>>>>>>>>> I have the PartymgrDecoratorLocation in my web.xml
>>>>>>>>>>>>>>> so I get to the find screen OK.
>>>>>>>>>>>>>>> I have a few others in my web.xml as well.
>>>>>>>>>>>>>>> so I can navigate.
>>>>>>>>>>>>>>> however if you don't have these in your web.xml that is in
>>>>>
>>>>> the
>>>>>
>>>>>
>>>>>>>> same
>>>>>>>>
>>>>>>>>
>>>>>>>>>>>>>>> directory as the controller.xml you are using
>>>>>>>>>>>>>>> https://localhost:8443/myapp/control/partymgr
>>>>>>>>>>>>>>> then you get messages like this.
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> org.ofbiz.base.util.GeneralException: Error rendering screen
>>>>>>>>>>>>>>>
>>>>>>>
>>>>>>>
>>>>> [component://party/widget/partymgr/CommunicationScreens.xml#EditCommunicationEvent]:
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>>>>>>>>>>> java.lang.IllegalArgumentException: Could not find screen
>>>>>
>>>>> with
>>>>>
>>>>>
>>>>>>>> name
>>>>>>>>
>>>>>>>>
>>>>>>>>>>>>>>> [CommonCommunicationEventDecorator] in the same file as the
>>>>>>>>
>>>>>>>> screen
>>>>>>>>
>>>>>>>>
>>>>>>>>>>>>>>> with
>>>>>>>>>>>>>>> name [EditCommunicationEvent] (Could not find screen with
>>>>>
>>>>> name
>>>>>
>>>>>
>>>>>>>>>>>>>>> [CommonCommunicationEventDecorator] in the same file as the
>>>>>>>>
>>>>>>>> screen
>>>>>>>>
>>>>>>>>
>>>>>>>>>>>>>>> with
>>>>>>>>>>>>>>> name [EditCommunicationEvent])
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> BJ,
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> Do you have any specific examples of what you're describing?
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> -Adrian
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> BJ Freeman sent the following on 11/5/2007 3:59 PM:
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> sorry not a complete thougt
>>>>>>>>>>>>>>>> This is not a real bug.
>>>>>>>>>>>>>>>> when you included another contorller
>>>>>>>>>>>>>>>> and there is a commonscreen.xml defined in the web.xml of
>>>>>
>>>>> the
>>>>>
>>>>>
>>>>>>>>>>>>>>>> calling
>>>>>>>>>>>>>>>> controller application it causes an error.
>>>>>>>>>>>>>>>> so maybe puttting the application name before
>>>>>
>>>>> commonescreens
>>>>>
>>>>>
>>>>>>>> will
>>>>>>>>
>>>>>>>>
>>>>>>>>>>>>>>>> eliminate that.
>>>>>>>>>>>>>>>> BJ Freeman sent the following on 11/5/2007 3:55 PM:
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> This is not a real bug.
>>>>>>>>>>>>>>>>> when you included another contorller
>>>>>>>>>>>>>>>>> and it has a commonscreen.xml
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> another is that when the the other widget from the
>>>>>
>>>>> included
>>>>>
>>>>>
>>>>>>>>>>>>>>>>> controller
>>>>>>>>>>>>>>>>> calls for a context that is in the web.xml of that
>>>>>>>>
>>>>>>>> application.
>>>>>>>>
>>>>>>>>
>>>>>>>>>>>>>>>>> it is not found.
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>
>>>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>
>>>
>>>
>>>
>>
>>
> 
> 
> 
> 

Reply via email to