CategoryLocalization UI

Bearbeiten von Kategorien funktioniert nun. (#107)
Liste der Sprachversionen ist nun nach locale sortiert

git-svn-id: https://svn.libreccm.org/ccm/trunk@1809 8810af33-2d31-482b-a856-94f89814c4df
master
quasi 2012-08-09 08:46:16 +00:00
parent 8aea372fd5
commit 6431b0a5d5
8 changed files with 113 additions and 54 deletions

View File

@ -105,7 +105,7 @@ cms.contenttypes.ui.event_start_time=Event Start Time:
cms.contenttypes.ui.event_end_time=Event End Time: cms.contenttypes.ui.event_end_time=Event End Time:
cms.contenttypes.ui.government_uid=Government UID: cms.contenttypes.ui.government_uid=Government UID:
cms.contenttypes.ui.grade=Grade: cms.contenttypes.ui.grade=Grade:
cms.contenttypes.ui.homepage=Homepage? cms.contenttypes.ui.homepage=Homepage:
cms.contenttypes.ui.job_description=Job Description: cms.contenttypes.ui.job_description=Job Description:
cms.contenttypes.ui.launch_date=Launch Date: cms.contenttypes.ui.launch_date=Launch Date:
cms.contenttypes.ui.lead=Description: cms.contenttypes.ui.lead=Description:

View File

@ -70,7 +70,7 @@ cms.contenttypes.template.body_text.description=Haupttext bearbeiten
cms.contenttypes.shared.assign_categories.title=Kategorien zuweisen cms.contenttypes.shared.assign_categories.title=Kategorien zuweisen
cms.contenttypes.shared.assign_categories.description=Kategorien zuweisen cms.contenttypes.shared.assign_categories.description=Kategorien zuweisen
cms.contenttypes.shared.attach_files.title=Dateien zuordnen cms.contenttypes.shared.attach_files.title=Dateien zuordnen
cms.contenttypes.shared.attach_files.description=Dateien anh\u00c4ngen cms.contenttypes.shared.attach_files.description=Dateien anh\u00e4ngen
cms.contenttypes.shared.basic_properties.description=Basiseigenschaften editieren cms.contenttypes.shared.basic_properties.description=Basiseigenschaften editieren
cms.contenttypes.shared.basic_properties.title=Basiseigenschaften cms.contenttypes.shared.basic_properties.title=Basiseigenschaften
cms.contenttypes.shared.body_text.title=Haupttext cms.contenttypes.shared.body_text.title=Haupttext
@ -105,7 +105,7 @@ cms.contenttypes.ui.event_start_time=Event Beginn um\:
cms.contenttypes.ui.event_end_time=Event Ende um\: cms.contenttypes.ui.event_end_time=Event Ende um\:
cms.contenttypes.ui.government_uid=Government UID: cms.contenttypes.ui.government_uid=Government UID:
cms.contenttypes.ui.grade=Grad: cms.contenttypes.ui.grade=Grad:
cms.contenttypes.ui.homepage=Homepage? cms.contenttypes.ui.homepage=Homepage:
cms.contenttypes.ui.job_description=Job Beschreibung: cms.contenttypes.ui.job_description=Job Beschreibung:
cms.contenttypes.ui.launch_date=Ver\u00f6ffentlichungsdatum: cms.contenttypes.ui.launch_date=Ver\u00f6ffentlichungsdatum:
cms.contenttypes.ui.lead=Beschreibung (Lead Text): cms.contenttypes.ui.lead=Beschreibung (Lead Text):
@ -160,8 +160,8 @@ cms.installer.cannot_find_file=kann Datei nicht finden
cms.installer.cannot_find_group_for_email=Kann email-Gruppe nicht finden cms.installer.cannot_find_group_for_email=Kann email-Gruppe nicht finden
cms.installer.cannot_read_line_of_data=Kann Datensatz nicht lesen cms.installer.cannot_read_line_of_data=Kann Datensatz nicht lesen
cms.installer.cannot_set_template_text=Kann Template Text nicht festlegen cms.installer.cannot_set_template_text=Kann Template Text nicht festlegen
cms.installer.could_not_load_section=Kann die folgende ContentSection nicht laden '{0}' cms.installer.could_not_load_section=Kann die ContentSection '{0}' nicht laden
cms.installer.deploy=anwenden cms.installer.deploy=Anwenden
cms.installer.failed_to_update_the_default_content_section=Update der Default Content Section gescheitert. cms.installer.failed_to_update_the_default_content_section=Update der Default Content Section gescheitert.
cms.installer.formbuilder.form=Form cms.installer.formbuilder.form=Form
cms.installer.formbuilder.form_section=Form Abschnitt cms.installer.formbuilder.form_section=Form Abschnitt
@ -187,7 +187,7 @@ cms.publishToFile.cannot_read_template_text=cannot read template text
cms.publishToFile.could_not_get_object_for_oid=Could not get object for oid cms.publishToFile.could_not_get_object_for_oid=Could not get object for oid
cms.publishToFile.error_executing=Ausf\u00fchrungsfehler bei '{0}' \: cms.publishToFile.error_executing=Ausf\u00fchrungsfehler bei '{0}' \:
cms.publishToFile.exit_value_was=Exit Code war cms.publishToFile.exit_value_was=Exit Code war
cms.publishToFile.interrupted_when_doing=Unterbrochen bei Ausf\u00fchren von '{0}' cms.publishToFile.interrupted_when_doing=Unterbrochen beim Ausf\u00fchren von '{0}'
cms.publishToFile.invalid_brokenlinkaction=Ung\u00fcltige BrokenLinkAction\: cms.publishToFile.invalid_brokenlinkaction=Ung\u00fcltige BrokenLinkAction\:
cms.publishToFile.invalid_reference_target_type=Ung\u00fcltige reference target type\: cms.publishToFile.invalid_reference_target_type=Ung\u00fcltige reference target type\:
cms.publishToFile.malformed_url=Falsche Struktur der URL\: cms.publishToFile.malformed_url=Falsche Struktur der URL\:
@ -232,7 +232,7 @@ cms.ui.available_categories=Verf\u00fcgbare Kategorien:
cms.ui.browse=Dokumente cms.ui.browse=Dokumente
cms.ui.browse_items_by_category=Durchsicht der Elemente nach Kategorien cms.ui.browse_items_by_category=Durchsicht der Elemente nach Kategorien
cms.ui.cancel=Abbruch cms.ui.cancel=Abbruch
cms.ui.cancel_hit=Abbruch dr\u00fccken cms.ui.cancel_hit=Abbruch gedr\u00fcckt
cms.ui.cancelled=abgebrochen cms.ui.cancelled=abgebrochen
cms.ui.cannot_assign_groups_to_owner=cannot assign groups to owner cms.ui.cannot_assign_groups_to_owner=cannot assign groups to owner
cms.ui.categories=Kategorien cms.ui.categories=Kategorien
@ -241,7 +241,7 @@ cms.ui.content_center=Content center
cms.ui.content_item=Dokument cms.ui.content_item=Dokument
cms.ui.content_section=Content section cms.ui.content_section=Content section
cms.ui.content_section_configuration=<h2>Content Section Configuration</h2> cms.ui.content_section_configuration=<h2>Content Section Configuration</h2>
cms.ui.content_types=Dokument Typen cms.ui.content_types=Dokumenttypen
cms.ui.contents_of=Inhalt von cms.ui.contents_of=Inhalt von
cms.ui.create=Erstellen cms.ui.create=Erstellen
cms.ui.cse=Bald abgelaufen cms.ui.cse=Bald abgelaufen
@ -324,10 +324,10 @@ cms.ui.tasks_status_no_colon=Status
cms.ui.template=Vorlage cms.ui.template=Vorlage
cms.ui.Templates=Vorlagen cms.ui.Templates=Vorlagen
cms.ui.the_model_is_empty=Das Modell ist leer cms.ui.the_model_is_empty=Das Modell ist leer
cms.ui.there_are_no_items=Keine elemente vorhanden. cms.ui.there_are_no_items=Keine Elemente vorhanden.
cms.ui.there_was_no_one_matching_the_search_criteria=Kein Element erf\u00fcllte die Suchkriterien. cms.ui.there_was_no_one_matching_the_search_criteria=Kein Element erf\u00fcllte die Suchkriterien.
cms.ui.this_should_never_happen=Dies sollte nie passieren\! cms.ui.this_should_never_happen=Dies sollte nie passieren\!
cms.ui.types=Dokument Typen cms.ui.types=Dokumenttypen
cms.ui.unknown=unbekannt cms.ui.unknown=unbekannt
cms.ui.upload_new_content=Neuen Inhalt laden cms.ui.upload_new_content=Neuen Inhalt laden
cms.ui.use_custom_permissions=Benutzerspezifische Rechte cms.ui.use_custom_permissions=Benutzerspezifische Rechte
@ -352,9 +352,9 @@ cms.ui.item_search.search=Suchen
# Package com.arsdigita.cms.ui.authoring # Package com.arsdigita.cms.ui.authoring
# ====================================== # ======================================
cms.ui.authoring.an_item_with_this_name_already_exists=Ein Item mit diesem Namen existiert cms.ui.authoring.an_item_with_this_name_already_exists=Ein Item mit diesem Namen existiert bereits
cms.ui.authoring.bad_getblob_datatype=Ung\u00fcltiger Datentyp getBlob cms.ui.authoring.bad_getblob_datatype=Ung\u00fcltiger Datentyp getBlob
cms.ui.authoring.bad_getclob_datatype=Ung\u00fcltiger Datentyp getBlob cms.ui.authoring.bad_getclob_datatype=Ung\u00fcltiger Datentyp getClob
cms.ui.authoring.body=Textbereich: cms.ui.authoring.body=Textbereich:
cms.ui.authoring.caption=Untertitel: cms.ui.authoring.caption=Untertitel:
cms.ui.authoring.content_type=Inhaltstyp: cms.ui.authoring.content_type=Inhaltstyp:
@ -457,7 +457,7 @@ cms.ui.category.localization_edit=Bearbeiten
cms.ui.category.localization_error_locale=Bitte w\u00e4hlen Sie eine Sprache aus cms.ui.category.localization_error_locale=Bitte w\u00e4hlen Sie eine Sprache aus
cms.ui.category.localization_locale=Sprache cms.ui.category.localization_locale=Sprache
cms.ui.category.localization_name=Name cms.ui.category.localization_name=Name
cms.ui.category.localization_none=Diese Kaegorie hat keine Sprachversionen cms.ui.category.localization_none=Diese Kategorie hat keine Sprachversionen
cms.ui.category.localization_url=URL cms.ui.category.localization_url=URL
cms.ui.category.name_not_unique=Es gibt bereits eine Kategorie mit diesem Namen. cms.ui.category.name_not_unique=Es gibt bereits eine Kategorie mit diesem Namen.
cms.ui.category.no_categorized_objects=Es gibt keine kategorisierten Objekte cms.ui.category.no_categorized_objects=Es gibt keine kategorisierten Objekte
@ -489,8 +489,8 @@ cms.ui.cse.authorName=Verfasser
cms.ui.cse.itemName=Name cms.ui.cse.itemName=Name
cms.ui.cse.view=Anzeigen cms.ui.cse.view=Anzeigen
cms.ui.cse.viewLink=anzeigen cms.ui.cse.viewLink=anzeigen
cms.ui.cse.edit=Edit cms.ui.cse.edit=Bearbeiten
cms.ui.cse.editLink=edit cms.ui.cse.editLink=bearbeiten
cms.ui.cse.endDateTime=aktiv bis cms.ui.cse.endDateTime=aktiv bis
@ -498,7 +498,7 @@ cms.ui.cse.endDateTime=aktiv bis
# =================================== # ===================================
cms.ui.folder.cancelled=Abgebrochen cms.ui.folder.cancelled=Abgebrochen
cms.ui.folder.cannot_find_a_root_folder=Kein Wurzelverzeichnis gefunden. cms.ui.folder.cannot_find_a_root_folder=Kein Wurzelverzeichnis gefunden.
cms.ui.folder.na=K.A. cms.ui.folder.na=k.A.
cms.ui.folder.no_source_items_specified=Kein Quelldokument angegeben. cms.ui.folder.no_source_items_specified=Kein Quelldokument angegeben.
cms.ui.folder.parent=\u00dcbergeordneter Ordner cms.ui.folder.parent=\u00dcbergeordneter Ordner
cms.ui.folder.rename=Ordner umbenennen cms.ui.folder.rename=Ordner umbenennen
@ -507,7 +507,7 @@ cms.ui.folder.rename=Ordner umbenennen
# ======================================== # ========================================
cms.ui.formbuilder.description=Beschreibung: cms.ui.formbuilder.description=Beschreibung:
cms.ui.formbuilder.name=Name: cms.ui.formbuilder.name=Name:
cms.ui.formbuilder.oh_no_you_dont=Nicht, sie wollen nicht cms.ui.formbuilder.oh_no_you_dont=Nein, das wollen sie nicht
cms.ui.formbuilder.title=Titel\: cms.ui.formbuilder.title=Titel\:

View File

@ -22,8 +22,10 @@ import com.arsdigita.bebop.ActionLink;
import com.arsdigita.bebop.BaseLink; import com.arsdigita.bebop.BaseLink;
import com.arsdigita.bebop.Component; import com.arsdigita.bebop.Component;
import com.arsdigita.bebop.Form; import com.arsdigita.bebop.Form;
import com.arsdigita.bebop.FormModel;
import com.arsdigita.bebop.Label; import com.arsdigita.bebop.Label;
import com.arsdigita.bebop.Link; import com.arsdigita.bebop.Link;
import com.arsdigita.bebop.Page;
import com.arsdigita.bebop.PageState; import com.arsdigita.bebop.PageState;
import com.arsdigita.bebop.ParameterSingleSelectionModel; import com.arsdigita.bebop.ParameterSingleSelectionModel;
import com.arsdigita.bebop.SimpleContainer; import com.arsdigita.bebop.SimpleContainer;
@ -82,8 +84,6 @@ class CategoryItemPane extends BaseItemPane {
private final SingleSelectionModel m_model; private final SingleSelectionModel m_model;
private final CategoryRequestLocal m_category; private final CategoryRequestLocal m_category;
private final SimpleContainer m_detailPane; private final SimpleContainer m_detailPane;
private final StringParameter m_catLocaleParam = new StringParameter("catLocale");
private final ParameterSingleSelectionModel m_catLocale;
public CategoryItemPane(final SingleSelectionModel model, public CategoryItemPane(final SingleSelectionModel model,
final CategoryRequestLocal category, final CategoryRequestLocal category,
@ -92,7 +92,6 @@ class CategoryItemPane extends BaseItemPane {
final ActionLink deleteLink) { final ActionLink deleteLink) {
m_model = model; m_model = model;
m_category = category; m_category = category;
m_catLocale = new ParameterSingleSelectionModel(m_catLocaleParam);
// Details // Details
m_detailPane = new SimpleContainer(); m_detailPane = new SimpleContainer();
@ -338,9 +337,13 @@ class CategoryItemPane extends BaseItemPane {
private CategoryLocalizationTable m_catLocalizationTable; private CategoryLocalizationTable m_catLocalizationTable;
private CategoryLocalizationEditForm m_editCategoryLocalizationForm; private CategoryLocalizationEditForm m_editCategoryLocalizationForm;
private StringParameter m_catLocaleParam;
private ParameterSingleSelectionModel m_catLocale;
CategoryLocalizationSection(ActionLink addLink) { CategoryLocalizationSection(ActionLink addLink) {
setHeading(new Label(gz("cms.ui.category.localizations"))); setHeading(new Label(gz("cms.ui.category.localizations")));
m_catLocaleParam = new StringParameter("catLocale");
m_catLocale = new ParameterSingleSelectionModel(m_catLocaleParam);
final ActionGroup group = new ActionGroup(); final ActionGroup group = new ActionGroup();
setBody(group); setBody(group);
@ -353,6 +356,12 @@ class CategoryItemPane extends BaseItemPane {
connect(m_editCategoryLocalizationForm); connect(m_editCategoryLocalizationForm);
connect(m_catLocalizationTable, 0, m_editCategoryLocalizationForm); connect(m_catLocalizationTable, 0, m_editCategoryLocalizationForm);
} }
@Override
public void register(Page page) {
super.register(page);
page.addComponentStateParam(m_editCategoryLocalizationForm, m_catLocaleParam);
}
} }
private class SubcategorySection extends Section { private class SubcategorySection extends Section {

View File

@ -745,18 +745,19 @@ public class Category extends ACSObject {
*/ */
public boolean isEnabled(String locale) { public boolean isEnabled(String locale) {
// If not gloebally disabled and locale is not null or empty, test for localized version // If globally disabled, return category as disabled
if (locale != null && if (((Boolean) get(IS_ENABLED)).booleanValue() == false) {
!locale.isEmpty() && return false;
((Boolean) get(IS_ENABLED)).booleanValue() == true && }
m_categoryLocalizationCollection != null &&
m_categoryLocalizationCollection.localizationExists(locale)) { // Test for localized version
if (locale != null && !locale.isEmpty() && m_categoryLocalizationCollection != null && m_categoryLocalizationCollection.
localizationExists(locale)) {
// Return value of isEnabled from localized version, so categories could be disabled depending on locale // Return value of isEnabled from localized version, so categories could be disabled depending on locale
boolean isEnabled = m_categoryLocalizationCollection.isEnabled(); boolean isEnabled = m_categoryLocalizationCollection.isEnabled();
m_categoryLocalizationCollection.rewind(); m_categoryLocalizationCollection.rewind();
return isEnabled; return isEnabled;
//return m_categoryLocalizationCollection.isEnabled();
} else { } else {

View File

@ -36,11 +36,12 @@ public class CategoryLocalizationCollection extends ACSObjectCollection {
private String lastFoundLocale; private String lastFoundLocale;
public CategoryLocalizationCollection(Category category) { public CategoryLocalizationCollection(Category category) {
super(category.getLocalizations().getDataCollection()); this(category.getLocalizations().getDataCollection());
} }
public CategoryLocalizationCollection(DataCollection dataCollection) { public CategoryLocalizationCollection(DataCollection dataCollection) {
super(dataCollection); super(dataCollection);
addOrder("locale");
} }
/** /**
@ -118,9 +119,7 @@ public class CategoryLocalizationCollection extends ACSObjectCollection {
*/ */
public boolean localizationExists(String locale) { public boolean localizationExists(String locale) {
// Really string comparison using != ?? if (!m_dataCollection.isEmpty() && !"".equals(locale)) {
// && !locale.isEmpty() ?
if (!m_dataCollection.isEmpty() && locale != "") {
// First check, if we are already at the right position. This will speed up repeated access for the same locale // First check, if we are already at the right position. This will speed up repeated access for the same locale
if (this.getPosition() > 0 && this.getCategoryLocalization(). if (this.getPosition() > 0 && this.getCategoryLocalization().

View File

@ -195,6 +195,13 @@ public class DataCollectionDefinition extends LockableImpl {
m_properties.add(property); m_properties.add(property);
} }
/**
* Get a collection of objects from the database defined by model or
* null if the requested object type is invalid
*
* @param model
* @return data collection or null
*/
public final DataCollection getDataCollection(NavigationModel model) { public final DataCollection getDataCollection(NavigationModel model) {
Assert.isLocked(this); Assert.isLocked(this);

View File

@ -21,19 +21,21 @@ import com.arsdigita.globalization.GlobalizationHelper;
import com.arsdigita.kernel.Kernel; import com.arsdigita.kernel.Kernel;
import com.arsdigita.navigation.DataCollectionDefinition; import com.arsdigita.navigation.DataCollectionDefinition;
import com.arsdigita.navigation.DataCollectionRenderer; import com.arsdigita.navigation.DataCollectionRenderer;
import com.arsdigita.persistence.DataCollection; import com.arsdigita.persistence.DataCollection;
import com.arsdigita.persistence.Filter; import com.arsdigita.persistence.Filter;
import com.arsdigita.persistence.FilterFactory; import com.arsdigita.persistence.FilterFactory;
import com.arsdigita.util.Assert; import com.arsdigita.util.Assert;
import com.arsdigita.util.UncheckedWrapperException; import com.arsdigita.util.UncheckedWrapperException;
import com.arsdigita.xml.Element; import com.arsdigita.xml.Element;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
/**
* Abstract base class for object lists
*
* @author unknown
* @author Sören Bernstein (quasimodo) <sbernstein@zes.uni-bremen.de>
*/
public abstract class AbstractObjectList public abstract class AbstractObjectList
extends AbstractComponent implements ObjectList { extends AbstractComponent implements ObjectList {
@ -58,6 +60,14 @@ public abstract class AbstractObjectList
return m_renderer; return m_renderer;
} }
/**
* Get a list of objects from the database which meet a set criteria or
* null if the requested object type is invalid
*
* @param request
* @param response
* @return the object list or null
*/
protected DataCollection getObjects(HttpServletRequest request, protected DataCollection getObjects(HttpServletRequest request,
HttpServletResponse response) { HttpServletResponse response) {

View File

@ -15,22 +15,22 @@ package com.arsdigita.navigation.ui.object;
import com.arsdigita.navigation.Navigation; import com.arsdigita.navigation.Navigation;
import com.arsdigita.navigation.ui.AbstractObjectList; import com.arsdigita.navigation.ui.AbstractObjectList;
import com.arsdigita.persistence.DataCollection; import com.arsdigita.persistence.DataCollection;
import com.arsdigita.persistence.Filter; import com.arsdigita.persistence.Filter;
import com.arsdigita.persistence.FilterFactory; import com.arsdigita.persistence.FilterFactory;
import com.arsdigita.xml.Element; import com.arsdigita.xml.Element;
import java.util.HashMap; import java.util.HashMap;
import java.util.Iterator; import java.util.Iterator;
import java.util.Map; import java.util.Map;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
/** /**
* A complex object list * A complex object list
*
* An object list which will accept SQL filters to customize the content easily.
*
* @author Sören Bernstein <sbernstein@quasiweb.de>
*/ */
public class ComplexObjectList extends AbstractObjectList { public class ComplexObjectList extends AbstractObjectList {
@ -41,19 +41,52 @@ public class ComplexObjectList extends AbstractObjectList {
protected Map<String, String> m_customAttributes = protected Map<String, String> m_customAttributes =
new HashMap<String, String>(); new HashMap<String, String>();
// Getter / Setter
/**
* Sets a custom name for this list.
* @param name the list name
*/
public void setCustomName(String name) { public void setCustomName(String name) {
m_customName = name; m_customName = name;
} }
/**
* Gets the costum name for this list.
* @return the list name
*/
public String getCustomName() { public String getCustomName() {
return m_customName; return m_customName;
} }
/** /**
* Hinzufügen eines SQL-Filter zur Abfrage * Adds a custom attribute
* Verarbeitet einen boolschen Filter, der SQL-konform Formatiert ist. *
* Siehe PostgreSQL-Handbuch zur where-Klausel * @param attribute
* @param sqlfilter * @param value
*/
public void addCustomAttribute(final String attribute, final String value) {
m_customAttributes.put(attribute, value);
}
/**
* Gets a custom attribute
*
* @param attribute
* @return
*/
public String getCustomAttribute(final String attribute) {
return m_customAttributes.get(attribute);
}
/**
* Add a SQL filter to query.
* This filter can handle wildcards which have to be set with {@link #setParameter(java.lang.String, java.lang.Object)}
*
*See PostgreSQL handbook about where clause
*
* @param sqlfilter the sql filter
*/ */
public void setSQLFilter(String sqlfilter) { public void setSQLFilter(String sqlfilter) {
@ -61,22 +94,22 @@ public class ComplexObjectList extends AbstractObjectList {
} }
/**
* Set parameter for for sql filter.
*
* @param parameterName the parameter name of the
* @param value the value attached to the parameter
*/
public void setParameter(String parameterName, Object value) { public void setParameter(String parameterName, Object value) {
m_filterParameters.put(parameterName, value); m_filterParameters.put(parameterName, value);
} }
public String getCustomAttribute(final String attribute) { /**
return m_customAttributes.get(attribute); * Get all objects for this list.
} *
* Overrides the parent class to allow for sql filter
public void addCustomAttribute(final String attribute, final String value) {
m_customAttributes.put(attribute, value);
}
/* Diese Methode überschreibt die Methode aus der Eltern-Klasse, um
* die SQL-Filter berücksichtigen zu können
*/ */
@Override @Override
protected DataCollection getObjects(HttpServletRequest request, protected DataCollection getObjects(HttpServletRequest request,
@ -112,7 +145,7 @@ public class ComplexObjectList extends AbstractObjectList {
return objects; return objects;
} }
/* Diese Methode wird vom Servlet aufgerufen */ /* This method will be called by the servlet */
public Element generateXML(HttpServletRequest request, public Element generateXML(HttpServletRequest request,
HttpServletResponse response) { HttpServletResponse response) {
Element content = Navigation.newElement("complexObjectList"); Element content = Navigation.newElement("complexObjectList");