- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
final URL eines Datasets
Hallo zusammen,
ich benutze quasi die UrlFactory aus den Beispielen. Das funktioniert auch wunderbar, allerdings bleibt ein Problem.
Hat man nun im Java-Client eine Produkt-Detailseite, so habe ich in meinem Modul als selected Element kein SectionImpl-Objekt, sondern ein DatasetImpl-Objekt.
Dieses ist kein ContentProducer und somit kann ich auch nicht die getUrl-Methode der UrlFactory benutzen.
Wie komme ich an die finale URL einer ausgewählten Produkt-Detail-Seite?
- Labels:
-
Developers
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Wieso gehst du nicht den von mir skizzierten Weg?
[EDIT]
An das Dataset kommst du mit "context.getElement()".
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
gerne, aber ich weiß halt nicht, wie ich an das pageRef rankomme um pageref.getStoredUrl aufzurufen.
Mir fehlt also quasi der Teil:
PageRef pageref = ...;
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Eine Möglichkeit wäre z.B. so: dataset.getTableTemplate().getPreviewPageRef()
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Das war es ... danke schön. Mit der PageRef funktioniert es dann ja auch mit dem gewünschten Weg.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Das war es doch nicht
Zumindest in der Mithras-Responsiv Version ist das dataset.getTableTemplate().getPreviewPageRef() immer dasselbe für alle Produkte aller Kategorien.
Nachtag: Auch in der normalen Mithras Version bekomme ich als URL immer:
/Produkte/[Kopiervorlage]-Modulwechselrichter-150W-12V-Mini.html
für alle Produkte.
Es sollte aber am Ende eigentlich z.B.:
/Produkte/Solarspeicher/Accum-1-000-L.html
entstehen.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Gibt es hier schon eine Lösung?
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hm, meiner Meinung nach steht schon alles hier. Die Bestimmung der Seitenreferenz ist abhängig vom Kontext. Außerdem kann es ja durchaus gewünscht sein, das ein Datensatz an mehreren Stellen gerendert wird. Dein Problem, das die URL eines ganz anderen Datensatzes herauskommt, kann ich aber nicht nachvollziehen.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hmmm .. hier ist nochmal der fertige Code, der aber im Falle eines Dataset immer die Url des Produktes liefert, welches ((Dataset) storeElement).getTableTemplate().getPreviewPageRef() für alle Elemente einer Datenquelle gleich ist. Vielleicht ist hier noch ein Gedankenfehler!?
Erst mal der Einstieg über einen Button im Template selbst ...
public class MyExecutable implements Executable{
@Override
public Object execute(Map<String, Object> paramMap) throws ExecutionException {
IDProvider selectedElement = (IDProvider) paramMap.get("element");
BaseContext context = (BaseContext) paramMap.get("context");
Language language = (Language) paramMap.get("language");
MyClass.doit(context, selectedElement , language);
return null;
}
@Override
public Object execute(Map<String, Object> paramMap, Writer paramWriter1, Writer paramWriter2) throws ExecutionException {
return null;
}
}
Und dann der Code, der mir die entsprechende URL zum selectedElement liefern soll ...
protected String getUrl() {
StoreElement storeElement = selectedElement;
PageRef pageRef;
if (storeElement instanceof Dataset) {
pageRef = ((Dataset) storeElement).getTableTemplate().getPreviewPageRef();
} else {
// get PageRef from page
}
final TemplateSet templateSet = fetchTemplateSet(pageRef);
PageParams pageParams = pageRef.getMultiPageParams(language, templateSet).getPageParams(0);
final UrlFactory urlFactory = config.createUrlFactory();
return urlFactory.getUrl(pageRef, templateSet, language, pageParams);
}
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Du hast einige Hinweise in diesem Thread ignoriert
Kurzfassung ist: Für Datensätze bitte diesen Code benutzen
pageref.getStoredUrl(language, templateset, dataset.getEntity())
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Ich hatte das schon versucht, dann aber aufgegeben, da die Methode getStoredUrl an der Stelle null lieferte.
Jetzt habe ich das noch mal probiert und festgestellt, dass gerade meine getesteten Entities null liefern. Andere gehen aber wie gewünscht.
z.B. bei dem Produkt KM 12 poly im Mithras Responsive Design liefert die Methode null zurück. Es existiert aber die URL: /Produkte/Kristalline-Module/Christallinemodule-Produkt_1044.html nach dem Deployment.
Woran liegt das?

