I have made progress. it all ha dto do with the .classpath, .project
files. when I picked up files from a pristine newly created D2W app, my
app began responding ..... almost
D2W is set up with all these rules, very powerful. what is happening is
when the app runs and you log in, a session is created. and lots of
magic happens here.
There is a text file NavigationMenu.plist:
(
{
name = Root;
directActionClass = DirectAction;
directActionName = default;
children = ("Home", "Agenda", "CallReport", "ContactReport",
"KickOffBrief", "MeetingAgenda",
"ProjectWorkOrder", "ListPerson", "ListClient");
},
{
name = "Home";
action = "session.navController.homeAction";
children = ("Logout");
},
{
name = "Agenda";
displayName = "Agenda";
action = "session.navController.listAgendasForUser";
conditions = ("session.user.canSeeAgendas");
children = ("SearchAgenda", "CreateAgenda");
childrenConditions = "isSelected";
},
etc
As you see the action in Home is action =
"session.navController.homeAction";
there is a method on the MainNavigationController
_public WOComponent homeAction() {
NSLog.out.appendln(" * calling homeAction ");
NSLog.out.appendln(" ");
//return D2W.factory().defaultPage(session());
return D2W.factory().pageForConfigurationNamed("Instructions",
session());
} _
When the app runs, this method is called. On the home page there is a
button "Home". When you press this buttton, the method fires.
However when you click Agenda this is supposed to fire:
public WOComponent listAgendasForUserDonotRun() {
EOEditingContext ec = ERXEC.newEditingContext();
ec.lock();
ListPageInterface lpi;
try {
EODatabaseDataSource ds = new EODatabaseDataSource(ec, AGENDA);
ERXFetchSpecification<Agenda> fs =
new ERXFetchSpecification<Agenda>(Agenda.ENTITY_NAME,
ERXQ.equals(Agenda.IS_COMPLETE_KEY,
false).and(Agenda.PERSON.eq(session().user())), null);
ds.setFetchSpecification(fs);
lpi =
D2W.factory().listPageForEntityNamed(Agenda.ENTITY_NAME, session());
lpi.setDataSource(ds);
if(lpi instanceof D2WPage) {
((D2WPage) lpi).d2wContext().takeValueForKey("Agenda",
"navigationState");
}
}
finally {
ec.unlock();
}
return (WOComponent) lpi;
}
So I put in a Faux method and this fires great.
public WOComponent listAgendasForUser() {
NSLog.out.appendln(" *listAgendasForUser ");
return null;
}
Is there something wrong with my logic. But only here in maven? When I
run this app under fluffy bunny? It Runs fine
There has to be something wrong with the setup.
On 1/16/26 9:49 AM, Jesse Tayler wrote:
Well, your component is looking for bodyClass- this would be a local function
or variable you are missing -
On Jan 15, 2026, at 3:33 PM, Theodore Petrosky via
Webobjects-dev<[email protected]> wrote:
So I have this problem with this app. Question, Is is possible that my app is
not 'finding' the connected components? Is there something I need to adjust in
my .classpath or .project?
I am going to create a New D2W app, and examine these files.
But, if someone has a idea of where to look...
Ted
On 1/15/26 9:41 AM, Theodore Petrosky via Webobjects-dev wrote:
I have a Fluffy Bunny app (D2W) that I have finally converted to use maven.
It uses a framework (converted from FB to Maven) as well as other custom
frameworks that I had to learn to convert from FB to Maven.
Finally, after two weeks of little red Xs, they have resolved and my app runs.
Better than that, it does all the migrations to my localhost, or to the
Postgresql instance I have on AWS.
Here my problem. The app launches, runs the migrations, presents the login
screen. Click the login button, and it blows up.
This is the top of the error:
http://127.0.0.1:58799/cgi-bin/WebObjects/ASBriefsD2W.woa
Jan 15 14:36:41 ASBriefsD2W[58799] WARN NSLog -
Jan 15 14:36:41 ASBriefsD2W[58799] DEBUG NSLog - Waiting for requests...
Jan 15 14:36:43 ASBriefsD2W[58799] DEBUG NSLog - === Begin Internal
Transaction
Jan 15 14:36:43 ASBriefsD2W[58799] DEBUG NSLog - evaluateExpression:
<com.webobjects.jdbcadaptor.PostgresqlExpression: "SELECT t0.abbreviation, t0.canseeagendas,
t0.canseecallreports, t0.canseeclientarea, t0.canseecreativebriefs, t0.canseekobriefs, t0.canseepersonarea,
t0.firstname, t0.id, t0.isaccountteam, t0.isactive, t0.iscreativeteam, t0.istrafficmanager, t0.lastname, t0.login,
t0.password, t0.showshelptext FROM person t0 WHERE (t0.login = ?::text AND t0.password = ?::text)"
withBindings: 1:"sysadmin"(login), 2:"4004"(password)>
Jan 15 14:36:43 ASBriefsD2W[58799] DEBUG NSLog - 1 row(s) processed
Jan 15 14:36:43 ASBriefsD2W[58799] DEBUG NSLog - === Commit Internal
Transaction
Jan 15 14:36:43 ASBriefsD2W[58799] DEBUG NSLog - === Begin Internal
Transaction
Jan 15 14:36:43 ASBriefsD2W[58799] DEBUG NSLog - evaluateExpression:
<com.webobjects.jdbcadaptor.PostgresqlExpression: "SELECT t0.id, t0.iscurrent, t0.logotitle FROM
brieflogo t0 WHERE t0.logotitle = ?::text" withBindings: 1:"AgencySacks"(logoTitle)>
Jan 15 14:36:43 ASBriefsD2W[58799] DEBUG NSLog - 1 row(s) processed
Jan 15 14:36:43 ASBriefsD2W[58799] DEBUG NSLog - === Commit Internal
Transaction
Jan 15 14:36:43 ASBriefsD2W[58799] WARN NSLog (Instructions) -
WOBundle.lookForClassInAllBundles(MenuHeader) failed!
Jan 15 14:36:43 ASBriefsD2W[58799] ERROR er.extensions.appserver.ERXApplication
(Instructions) - Exception caught: [<com.webobjects.appserver.WOComponent name:
PageWrapper subcomponents: {0.1 = <er.directtoweb.components.ERD2WHead name:
er.directtoweb.components.ERD2WHead subcomponents: null >; } > valueForKey()]: lookup
of unknown key: 'bodyClass'.
The WOComponent com.webobjects.appserver.WOComponent does not have an instance
variable of the name bodyClass or _bodyClass, nor a method of the name
bodyClass, _bodyClass, getBodyClass, or _getBodyClass
Extra info: {
"D2W-SubTask" = "null";
"D2W-PageConfiguration" = "Instructions";
"CurrentComponent" = "PageWrapper";
"PreviousPageList" = ();
"D2W-PropertyKey" = "null";
"D2W-DisplayPropertyKeys" = (
"abbreviation",
"agendas",
"briefs",
"callReports",
"canSeeAgendas",
"canSeeCallReports",
"canSeeClientArea",
"canSeeCreativeBriefs",
"canSeeKOBriefs",
"canSeePersonArea",
"firstName",
"isAccountTeam",
"isActive",
"isCreativeTeam",
"isTrafficManager",
"lastName",
"login",
"meetingAgendas",
"password",
"preferences",
"showsHelpText"
);
"CurrentPage" = "er.modern.look.pages.ERMODInspectPage";
"URL" = "/cgi-bin/WebObjects/ASBriefsD2W.woa/wa/login";
"CurrentComponentHierarchy" = (
"er.modern.look.pages.ERMODInspectPage",
"PageWrapper"
);