BJ's problem occurs because when he <include>s the party controller and the catalog controller, he wants the requests/views from the party controller to have mainDecoratorLocation equal one place and the requests/views from the catalog controller to equal another.
The only way for it to solve BJ's issue is to replace current ${parameters.mainDecoratorLocation} with ${parameters.randomVariableThatSuggestsTheScreenThisIsBeingCalledFromBelongsToAWebAppDecoratorLocation} or to remove the variable location altogether, thus breaking the ability call that screen from a custom application. Not simply provide a variable to <decororator-screen> location's that are empty. ----- Original Message ---- From: Adrian Crum <[EMAIL PROTECTED]> To: dev@ofbiz.apache.org Sent: Monday, December 17, 2007 11:46:26 AM Subject: Re: Include of controllers If BJ supplies a patch as I described, then we'll see if it solves his problem. If it does, then we're talking about the same issue. ;-) -Adrian Chris Howe wrote: > You two are talking about different issues. BJ is describing a pitfall that occurs when you use the <include> tag in the controller for a scenario that wasn't considered when the <include> tag was implemented in the controller. > > ----- Original Message ---- > From: Adrian Crum <[EMAIL PROTECTED]> > To: dev@ofbiz.apache.org > Sent: Monday, December 17, 2007 11:33:43 AM > Subject: Re: Include of controllers > > > 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. >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> >>>>>>> >>>>> >>>>> >>>>> >>>>> >>> >>> >> > > > > >