Cameleon FAQ Servlet Deutsch

Beiträge zur Dokumentation von Cameleon OSP

Frage: Wie kann ich mit der Klasse "de.must.markup.DataList" mit der Methode "getRowString()" mehrere Datenbankfeldwerte hintereinander ausgeben?

Antwort: return listDataObject.getText("feldbezeichner2") + " , " + listDataObject.getText("feldbezeichner2") usw.

Frage: Wie kann ich dafür sorgen, dass gleich beim Aufruf eines Servlets die Klasse "de.must.markup.LoginDialog" aufgerufen wird?

Antwort: Füge am Ende der Methode "build()" in die von "de.must.markup.SessionStd" abgeleitete Klasse folgende Zeilen ein:
YourLoginDialog login = new YourLoginDialog(sessionData);
baseInvoke(login);

Frage: Wie kann ich von meinem Servlet aus eine x-beliebige HTML-Seite aufrufen – beispielsweise eine "Über..."-Seite

Antwort: Füge in Deine von "de.must.markup.MustMenuBar" abgeleiteten Klasse folgende Zeile nach einer "addMenu()"-Methode ein:
addMenuItem("Über...", new Href("must.html"));
Falls sich die Datei "must.html" nicht im selben Verzeichnis befindet wie Deine Klassen, sondern 2 Verzeichnisse darüber, so musst Du z.B. folgende Zeile einfügen:
addMenuItem("Über...", new Href("./../must.html"));

Frage: Wozu wird die Klasse "DoIdent" (sprich DataObjectIdent) benötigt?

Antwort: Diese Klasse verwaltet die Primärschlüssel in der Tabelle "Identity" und wird zum Aufnehmen neuer Datensätze in eine Datenbanktabelle benötigt. Sie und die dazugehörende Tabelle "Identity" sind zum Funktionieren des Frameworks von elementarer Bedeutung!

Frage: Wie kann ich z.B. die Klasse "de.must.markup.DataPropertyAdministration" dazu bringen nur das Neuaufnehmen von Datensätzen anzubieten und nicht das Ändern von Datensätzen?

Antwort: Das Framework kennt unter anderen den Level "LEVEL_ADD". Dieser Level ist kleiner als der Level "LEVEL_CHANGE" und ist der Standardlevel der Dialogklassen. Wenn also ein Anwender durch seine Gruppenzugehörigkeit einen geringeren Level hat als "LEVEL_CHANGE", dann kann er nur Datensätze erfassen, aber keine ändern. Für die Klasse "DataList" bedeutet dies z.B., dass der Anwender nicht die Option "[Bearbeiten]" in der Liste angezeigt bekommt.

Frage: Wie kann ich die Klasse "de.must.markup.DataPropertyAdministration" dazu bringen manche Eingabefelder zum Ändern anzubieten und andere nur zum Ansehen? Gibt es so was wie bspw. die Methode "setEnabled(false)"?

Antwort: In der momentanen Version 1.1.4 gib es das leider noch nicht. Der Autor hat aber versprochen dies einzubauen.

Frage: Wie kann ich in die Klasse "de.must.markup.DataPropertyAdministration" eine Funktionalität einbauen die z.B. nach dem Speichern eines Datensatzes eine Mail verschickt?

Antwort: Am besten geht das, indem in der von "de.must.markup.DataPropertyAdministration" abgeleiteten Klasse die Methode "saveValues()" überschreibt und nach "super.saveValues()" diese Funktionalität plaziert. Man kann aber auch alternativ die Methode "isInputAccepted()" dafür "missbrauchen", indem man die Funktionalität darin aufnimmt und am Ende "return true" an das Framework zurück gibt.

Frage: Wie kann man im Login-Dialog dem Anwender einen Hinweis darauf geben was er einzugeben hat?

Antwort: Füge in Deiner von "de.must.markup.LoginDialog" abgeleiteten Klasse folgende Zeilen ein. Dies sorgt dafür, dass das Framework diese Zeile zwischen der Überschrift und den Eingabefeldern ausgibt:
protected String getLoginHint() {
return "(Bitte Benuterzkennung \"standard\", \"org\" or \"admin\" mit demselben Passwort eingeben)<p>\n";;
}

Frage: Wie kann man ich meinen Klassen eine kontextsensitive Hilfe verpassen?

Antwort: Alle von "de.must.markup.Dialog" abgeleiteten Klassen des Frameworks kennen alle die Methode "setHelpContext()". Diese Methode gibt es in 2 verschiedenen Ausführungen: "setHelpContext(String helpTopic)" und "setHelpContext(String helpTopic, String helpTarget)". Unter "helpTopic" wird dabei der Name der HTML-Datei ohne Extension verstanden, also z.B. "Operate", wenn die HTML-Datei "Operate.htm" heißt. Achtung! Die HTML-Datei darf demzufolge nicht mit "html" enden! Unter "helpTarget" wird ein sogenannter HTML-Abschnitts-Anker (<A NAME=newrec></A>) verstanden, also ein Anker im selben Dokument. Wenn als im Konstruktor Deiner Klasse "setHelpContext("Operate", "newrec")" angegeben ist, dann würde das Framework die Hilfeseite "Operate.htm" aufrufen und gleich zu dem Textanker der mit "newrec" angegeben ist hinspringen. Auf diese Art läßt sich sehr schon eine aktionsabhängige Hilfe auf HTML-Basis aufbauen.

Hinweis: die Klasse "de.must.markup.DataPropertyPresentation" kennt zusätzlich noch die Methode "setDeleteHelpContext()" mit denselben Parametern. Wenn der Anwender in der Bildschirmmaske die Option "Löschen" aufgrund seiner Rechte angeboten bekommt, und diese Option auswählt, dann erhält er eine Maske in welcher er das Löschen des Datensatzes bestätigen muss. Wenn er hier die Hilfe-Schaltfläche drückt, dann wird die Hilfeseite bzw. Abschnitt der Hilfeseite aufgerufen.

Frage: Wo ist hinterlegt wo die Hilfeseiten sich befinden (Pfad)?

Antwort: In der von "de.must.markup.Res_de_DE" abgeleiteten Klasse kann die Konstante "URI_HELP_INDEX" definiert werden. Beispielsweise könnte sie den Wert "../help/german/Index.htm" erhalten. Aus dieser Konstante isoliert das Framework den Pfad und setzt dann diesen vor den Aufruf der jeweiligen Hilfeseiten, im Falle der Cookbook-Demo werden die Hilfeseiten dann also im Verzeichnis "../help/german" gesucht. Selbstverständlich kann anstelle eines Verzeichnisses auch eine URI verwendet werden: "http://www.must.de/help/index.htm".

Frage:Wie kann ich einem Anwender eine Meldung machen, um ihn z.B. auf einen besonderen Umstand aufmerksam zu machen?

Antwort: Alle von "de.must.markup.Dialog" abgeleiteten Klassen des Frameworks kennen alle die Methode "setMessageToKeep(String meldung)" Wenn Du diese Methode z.B. in der Methode "saveValues()" aufrufst, dann würde unmittelbar nach dem Speichern der Daten die Methode "setMessageToKeep()" ausgeführt und der Anwender vor dem Aufruf der nächsten Aktion (bspw. eines Menüs) mit einem JavaScript-Fenster die Meldung zu sehen bekommen. Diese kann er dann mit "OK" bestätigen.

Frage: Bei meinem Netscape-Browser in der Version 4.73 kommt es zu der Fehlermeldung "We do not support the browser back function in this context", wenn ich die "Zurück"-Schaltfläche drücke. Was ist hierfür der Grund?

Antwort: Wahrscheinlich hast Du in den Einstellungen des Browsers bei "Erweitert" / "Cache" / "Vergleich zwischen Cache- und Netzwerk-Dokument erfolgt" den Wert "Nie" angewählt. Lösung: Wähle den Wert "Einmal pro Sitzung".

Autor: Gunter Koch, 08.03.02