Asset Publisher

An error occurred while processing the template.
The following has evaluated to null or missing:
==> FrontendService.media.getDMTJsonObject( coverBild.groupId?number, coverBild.uuid, locale ) [in template "252001#252047#252845" at line 128, column 37]
----
Tip: If the failing expression is known to legally refer to something that's sometimes null or missing, either specify a default value like myOptionalVar!myDefault, or use <#if myOptionalVar??>when-present<#else>when-missing</#if>. (These only cover the last step of the expression; to cover the whole expression, use parenthesis: (myOptionalVar.foo)!myDefault, (myOptionalVar.foo)??
----
----
FTL stack trace ("~" means nesting-related):
- Failed at: dMTJsonObject = FrontendService.media... [in template "252001#252047#252845" at line 128, column 21]
----
1<#-- used @ Veranstaltung-Detailseite Intro 
2 used @ Publikation-Detailseite Intro 
3--> 
4 
5<#-- 
6Web content templates to display teaser on thema detail page 
7 
8Generic template for detail pages Intro / Teaser element 
9--> 
10<#-- 
11Display the current page title 
12--> 
13<#include "${fullTemplatesPath}/functions/relatedContentUtil.ftl" /> 
14<#include "${fullTemplatesPath}/macros/debugging.ftl" /> 
15 
16<#include "${fullTemplatesPath}/macros/page-modules/PMIntro.ftl" /> 
17<#include "${fullTemplatesPath}/macros/atomic-modules/AMPublicationCarousel.ftl" /> 
18<#include "${fullTemplatesPath}/macros/atomic-modules/AMMetadata.ftl" /> 
19<#include "${fullTemplatesPath}/macros/atomic-modules/AMDatetime.ftl" /> 
20 
21 
22<#-- 
23 renders the Intro for nearly all Pages 
24 TODO: remove Share? (was in the designs, but not anymore?) 
25 TODO: check if languageSelect/filter are working (js) 
26 
27 - portletId 
28 - data = { 
29 "media": string (src from image), 
30 "category": string, 
31 "title": string, 
32 "author": string, 
33 "subheadline": string, 
34 "copy": string, 
35 "filter": { 
36 "id": string, 
37 "name": string, 
38 "entries": Array<Object> ({key:value}), 
39 }, 
40 "languageSelect": { 
41 "id": string, 
42 "name": string, 
43 "entries": Array<Object> ({key:value}), 
44 }, 
45 "meta": { 
46 "pos"; string (top/bottom) 
47 "date": string, 
48 "hash": string, 
49 "info": string, (url) 
50 }, 
51 "share" : { 
52 "login": string, 
53 "print": string, 
54 "mail": string, 
55 "multishare": string?? (tbd) 
56
57 - AMMetadata: macro 
58 - position: String ("top") -> defines wether the meta-data should be rendered above or below the intro-content 
59
60--> 
61 
62<#assign 
63 JournalArticleLocalService = serviceLocator.findService("com.liferay.journal.service.JournalArticleLocalService") 
64 
65 ServiceContext = staticUtil["com.liferay.portal.kernel.service.ServiceContextThreadLocal"].getServiceContext() 
66 DLAPP = serviceLocator.findService("com.liferay.document.library.kernel.service.DLAppLocalService") 
67 
68 themeDisplay = ServiceContext.getThemeDisplay() 
69 editmode = FrontendService.user.isPrivilegedUser(themeDisplay) 
70 
71 languageId = themeDisplay.getLocale() 
72 groupId = themeDisplay.getScopeGroupId() 
73 currentUrl = themeDisplay.getURLCurrent() 
74 
75 layout = themeDisplay.getLayout() 
76 layouttpl = layout.getTypeSettingsProperties().getProperty("layout-template-id") 
77/> 
78 
79<#setting locale="${languageId}"> 
80 
81<#-- get article from url --> 
82 
83<#assign entry = FrontendService.article.getArticleToUrl(currentUrl, groupId?number)! > 
84 
85 
86<#if entry?has_content> 
87 
88 <#if entry.resourcePrimKey??> 
89 <#assign primaryKey = entry.resourcePrimKey?number > 
90 <#elseif entry.classPK??> 
91 <#assign primaryKey = entry.classPK?number > 
92 </#if> 
93 
94 <#assign 
95 jsonString = FrontendService.article.getWebcontent(primaryKey) 
96 json = FrontendService.json.parseAsJson(jsonString) 
97 availablelanguages = FrontendService.article.getAssetEntryToUrl(primaryKey).getAvailableLanguageIds() 
98 
99 title = entry.getTitle(languageId) 
100 data = { 
101 "title": title 
102
103 /> 
104 <@debugJsonString jsonString "ADT_KASDE_DYNAMIC_INTRO" /> 
105 
106 <#if hasContent('untertitel', languageId, json)> 
107 <#assign data = data + { "subheadline": getValueForLanguage('untertitel', languageId, json, "first") } > 
108 </#if> 
109 
110 <#if hasContent('beschreibung', languageId, json)> 
111 <#assign data = data + { "copy": getValueForLanguage('beschreibung', languageId, json, "first") } > 
112 </#if> 
113 
114 <#-- fill meta data --> 
115 <#assign meta = {} /> 
116 
117 <#-- PUBLIKATIONEN DETAIL --> 
118 <#if layouttpl?contains("LAYOUT_KASDE_PUBLIKATIONEN_DETAIL")> 
119 
120 <#if hasContent('coverDMTKASDEMEDIUM', languageId, json)> 
121 <#assign 
122 coverBildString = getValueForLanguage('coverDMTKASDEMEDIUM', languageId, json, "first") 
123 /> 
124 
125 <#if coverBildString?has_content> 
126 <#assign 
127 coverBild = FrontendService.json.parseAsJson(coverBildString) 
128 dMTJsonObject = FrontendService.media.getDMTJsonObject( coverBild.groupId?number, coverBild.uuid, locale ) 
129 linkToDMT = FrontendService.media.getImageURLForAMConfiguration('hd-resolution',coverBild.groupId?number, coverBild.uuid ) 
130 data = data + { "media": linkToDMT, "meta" : dMTJsonObject } 
131 /> 
132 <#if dMTJsonObject.altText?? > 
133 <#assign data = data + {"alt" : dMTJsonObject.altText} /> 
134 </#if> 
135 <#if dMTJsonObject.quelle??> 
136 <#assign meta = meta + { "quelle": dMTJsonObject.quelle } /> 
137 </#if> 
138 </#if> 
139 <#-- uncomment to display pdf cover as Intro Image 
140 <#elseif hasContent('document_pdfDMTBASICDOCUMENT', languageId, json)> 
141 <#assign 
142 pdfDocument = getValueForLanguage('document_pdfDMTBASICDOCUMENT', languageId, json, "first") 
143 fileEntry = FrontendService.media.getFileEntry(pdfDocument.uuid, groupId?number)!/> 
144 <#if fileEntry?has_content> 
145 <#assign 
146 linkToThumbnail = FrontendService.link.getThumbnailSrc(fileEntry , themeDisplay) 
147 data = data + { "media": linkToThumbnail } 
148 /> 
149 </#if> 
150 --> 
151 </#if> 
152 
153 <#assign 
154 meta = meta + { "orderInfo": "true" } 
155 verbundJournalArticle = FrontendService.publication.getVerbundToPublikation( entry )!"" 
156 /> 
157 
158 
159 
160 <#if hasContent('erscheinungsdatum', languageId, json)> 
161 <#assign 
162 erscheinungsdatum = getValueForLanguage('erscheinungsdatum', languageId, json, "first") 
163 /> 
164 <#if erscheinungsdatum?has_content > 
165 <#assign 
166 erscheinungsdatumFormatted = FrontendService.date.getDateFormatLong( erscheinungsdatum, languageId ) 
167 meta = meta + { "date": erscheinungsdatumFormatted } 
168 /> 
169 </#if> 
170 </#if> 
171 
172 <#if verbundJournalArticle?has_content> 
173 <#assign 
174 verbundJsonString = FrontendService.article.getWebcontent(verbundJournalArticle.resourcePrimKey) 
175 verbundJson = FrontendService.json.parseAsJson(verbundJsonString) 
176 laufendenummer = getValueForLanguage('laufendenummer', languageId, verbundJson, "first") 
177 coverImg = getValueForLanguage('mediumDMTKASDEMEDIUM', languageId, verbundJson, "first") 
178 /> 
179 <@debugJsonString verbundJsonString "ADT_KASDE_DYNAMIC_INTRO-verbundJournalArticle" /> 
180 <#assign meta = meta + { "laufendenummer": laufendenummer } > 
181 
182 <#if coverImg?has_content && coverImg.url?has_content > 
183 <#assign meta = meta + { "coverImg": coverImg.url } > 
184 </#if> 
185 </#if> 
186 
187 
188 <#if meta?has_content> 
189 <#assign data = data + {"meta": meta } > 
190 </#if> 
191 
192 </#if> 
193 <#-- PUBLIKATIONEN DETAIL END --> 
194 
195 
196 <#-- VERANSTALTUNGEN DETAIL --> 
197 <#if layouttpl?contains("LAYOUT_KASDE_VERANSTALTUNGEN_DETAIL")> 
198 <#assign 
199 friendlyUrl = FrontendService.article.getFriendlyUrl(primaryKey, languageId, groupId)!"" 
200 links = [] 
201 /> 
202 <#if availablelanguages?has_content && friendlyUrl?has_content> 
203 <#if (availablelanguages?size > 1) > 
204 <#list availablelanguages as language> 
205 <#assign 
206 defaultLanguage = "de_DE" 
207 defaultLocale = FrontendService.language.getLocaleByKey(defaultLanguage) 
208 linkLocale = (FrontendService.language.getLocaleByKey(language))!defaultLocale 
209 langFriendlyUrl = FrontendService.article.getFriendlyUrl(primaryKey, linkLocale, groupId) 
210 
211 link = { 
212 "key": language!defaultLanguage, 
213 "value": linkLocale.getDisplayLanguage(languageId), 
214 "url": "/c/portal/update_language?p_l_id=" + 
215 layout.plid + "&redirect=" + langFriendlyUrl + 
216 "&languageId=" + language 
217
218 /> 
219 <#if language == languageId> 
220 <#assign link = link + { "selected": "true" } > 
221 </#if> 
222 <#assign links = links + [link]> 
223 </#list> 
224 <#assign 
225 data = data + { 
226 "languageSelect": { 
227 "id": "languageSelectRedirect", 
228 "name": "languageselectRedirect", 
229 "entries": links, 
230 "label": languageUtil.get(languageId, "diese.veranstaltung.ist.in.weiteren.sprachen.verfuegbar") 
231
232
233 /> 
234 </#if> 
235 </#if> 
236 </#if> 
237 
238 <#if hasContent('erscheinungsdatum', languageId, json)> 
239 <#assign 
240 startdate = getValueForLanguage('erscheinungsdatum', languageId, json, "first") 
241 meta = meta + { "start": startdate?date.iso, "end": "" } 
242 /> 
243 </#if> 
244 
245 <#if hasContent('startdatum', languageId, json)> 
246 <#assign 
247 startdate = getValueForLanguage('startdatum', languageId, json, "first") 
248 meta = meta + { "start": startdate?date.iso, "end": "" } 
249 /> 
250 </#if> 
251 
252 <#if hasValue('einfuehrungText', locale, json)> 
253 <#assign data = data + { "einfuehrungText" : getValueForLanguage('einfuehrungText', locale, json, "first") } > 
254 <#elseif hasValue(FrontendService.article.getFieldNameByReferenceName(primaryKey, 'einfuehrungText'), locale, json, "first")> 
255 <#assign data = data + { "einfuehrungText" : getValueForLanguage(FrontendService.article.getFieldNameByReferenceName(primaryKey, 'einfuehrungText'), locale, json, "first") } > 
256 </#if> 
257 
258 <#if hasContent('endedatum', languageId, json)> 
259 <#assign 
260 enddate = getValueForLanguage('endedatum', languageId, json, "first") 
261 meta = meta + { "end": enddate?date.iso } 
262 /> 
263 </#if> 
264 
265 <#if hasContent('startzeit', languageId, json)> 
266 <#assign 
267 startzeit = getValueForLanguage('startzeit', languageId, json, "first") 
268 /> 
269 <#if startzeit?has_content > 
270 <#assign meta = meta + { "startzeit": startzeit } /> 
271 </#if> 
272 </#if> 
273 
274 <#if hasContent('endezeit', languageId, json)> 
275 <#assign 
276 endezeit = getValueForLanguage('endezeit', languageId, json, "first") 
277 meta = meta + { "endezeit": endezeit } 
278 /> 
279 </#if> 
280 
281 <#if hasContent('ortWCSKASDEORT', languageId, json)> 
282 <#assign 
283 ortWCSKASDEORT = FrontendService.json.parseAsJson(getValueForLanguage('ortWCSKASDEORT', languageId, json, "first")) 
284 ortWCSKASDEORTPrimaryKey = ortWCSKASDEORT.classPK?number 
285 ortWCSKASDEORTWebContent = FrontendService.article.getWebcontentByPk(ortWCSKASDEORTPrimaryKey)!"" 
286 /> 
287 <#if ortWCSKASDEORTWebContent?has_content > 
288 <#assign 
289 ortWCSKASDEORTTitle = ortWCSKASDEORTWebContent.getTitle(languageId)!"" 
290 /> 
291 <#if ortWCSKASDEORTTitle?has_content > 
292 <#assign 
293 meta = meta + { "ortWCSKASDEORT": ortWCSKASDEORTTitle } 
294 /> 
295 </#if> 
296 </#if> 
297 </#if> 
298 
299 
300 <#if hasContent('veranstaltungsnummer', languageId, json)> 
301 <#assign 
302 verauuid = getValueForLanguage('veranstaltungsnummer', languageId, json, "first") 
303 meta = meta + { "verauuid": verauuid } 
304 /> 
305 </#if> 
306 
307 
308 <#if (data.meta)?has_content > 
309 <#assign meta = data.meta /> 
310 </#if> 
311 
312 <#if !(data.media)?has_content && hasContent('mediumDMTKASDEMEDIUM', languageId, json)> 
313 <#assign 
314 medium = getValueForLanguage('mediumDMTKASDEMEDIUM', languageId, json, "first") 
315 mediaData = getRelatedMediaObject(medium, themeDisplay, languageId, FrontendService, "hd-resolution") 
316 /> 
317 <#assign data = data + { "media": mediaData.url , "meta" : mediaData.meta} > 
318 
319 
320 <#if mediaData.meta?? && mediaData.meta.quelle??> 
321 <#assign meta = meta + data.meta + { "quelle": mediaData.meta.quelle } /> 
322 </#if> 
323 </#if> 
324 
325 
326 <#if meta?has_content> 
327 <#assign data = data + {"meta": meta } > 
328 </#if> 
329 
330 <#-- END fill meta data --> 
331 
332 <#if hasContentForSequence('autorenWCSKASDEPERSON', languageId, json)> 
333 <#assign 
334 journalArticles = getValueForLanguageAnsprechpartner('autorenWCSKASDEPERSON', languageId, json) 
335 authors = [] 
336 /> 
337 <#list journalArticles as articleString> 
338 <#assign article = FrontendService.json.parseAsJson(articleString) /> 
339 <#if article?has_content && article?is_hash && article.classPK??> 
340 <#assign articleDereferenced = FrontendService.person.resolveContactInstanceToPerson(article, languageId)!"" /> 
341 <#if articleDereferenced?has_content > 
342 <#assign 
343 author = "" 
344 articlePrimaryKey = articleDereferenced.classPK?number 
345 articleJsonString = FrontendService.article.getWebcontent(articlePrimaryKey) 
346 articleJson = FrontendService.json.parseAsJson(articleJsonString) 
347 /> 
348 <@debugJsonString articleJsonString "ADT_KASDE_DYNAMIC_INTRO-autorenWCSKASDEPERSON" /> 
349 <#if hasValue('anredetitel', languageId, articleJson)> 
350 <#assign author = author + getValueForLanguage('anredetitel', languageId, articleJson, " ") + " "> 
351 </#if> 
352 <#if hasValue('vorname', languageId, articleJson)> 
353 <#assign author = author + getValueForLanguage('vorname', languageId, articleJson, " ") + " "> 
354 </#if> 
355 <#if hasValue('nachname', languageId, articleJson)> 
356 <#assign author = author + getValueForLanguage('nachname', languageId, articleJson, " ") + " "> 
357 </#if> 
358 
359 <#attempt> 
360 <#assign href = FrontendService.article.getFriendlyUrl(articlePrimaryKey, languageId, groupId)!"#" > 
361 <#recover> 
362 <#assign href = "#" > 
363 </#attempt> 
364 <#if href?has_content && href != "#" && href != "/_404"> 
365 <#assign author = '<a href="' + href + '">' + author?trim + '</a>'> 
366 </#if> 
367 
368 <#assign authors = authors + [author?trim]> 
369 </#if> 
370 </#if> 
371 </#list> 
372 <#if authors?has_content> 
373 <#assign data = data + { "author": authors?join(", ") } > 
374 </#if> 
375 </#if> 
376 
377 <#if layouttpl?contains("LAYOUT_KASDE_VERANSTALTUNGEN_DETAIL") > 
378 <#assign categories = FrontendService.category.getCategoriesToArticle(primaryKey, "VERANSTALTUNGSTYP")! > 
379 <#if categories?has_content && categories[0]?has_content > 
380 <#assign data = data + { "category": categories[0].getTitle(languageId,true)! } > 
381 </#if> 
382 
383 <#if hasContent('ausgebucht', languageId, json)> 
384 <#assign data = data + { "ausgebucht" : getValueForLanguage('ausgebucht', languageId, json, "first") }> 
385 </#if> 
386 
387 <#if hasContent('storniert', languageId, json)> 
388 <#assign data = data + { "storniert" : getValueForLanguage('storniert', languageId, json, "first") }> 
389 </#if> 
390 
391 <#elseif layouttpl?contains("LAYOUT_KASDE_PUBLIKATIONEN_DETAIL") > 
392 <#assign categories = FrontendService.category.getCategoriesToArticle(primaryKey, "PUBLIKATIONSREIHE")! > 
393 <#if categories?has_content && categories[0]?has_content > 
394 <#assign data = data + { "category": categories[0].getTitle(languageId,true)! } > 
395 </#if> 
396 <#else> 
397 <#assign categories = FrontendService.category.getCategoriesToArticle(primaryKey, "THEMA")! > 
398 <#if categories?has_content && categories[0]?has_content > 
399 <#assign data = data + { "category": categories[0].getTitle(languageId,true)! } > 
400 </#if> 
401 </#if> 
402 
403 
404 <#assign 
405 languages = [] 
406 /> 
407 
408 <#attempt> 
409 <#if json["document_pdfDMTBASICDOCUMENT"]?? > 
410 <#if availablelanguages?has_content> 
411 <#list availablelanguages as pdf_language> 
412 <#assign 
413 docRefJson = getValueForLanguage('document_pdfDMTBASICDOCUMENT', pdf_language, json, "first") 
414 docRef = FrontendService.json.parseAsJson(docRefJson) 
415 /> 
416 <#if docRef?is_hash && pdf_language != languageId > 
417 <#assign 
418 lang = FrontendService.language.getLocaleByKey(pdf_language)!"" 
419 docGroupId = docRef["groupId"]?number 
420 docUuid = docRef["uuid"] 
421 dMTJsonObject = FrontendService.media.getDMTJsonObject( docGroupId, docUuid, locale ) 
422 dMTLink = FrontendService.media.getLinkToDMT( dMTJsonObject ) 
423 /> 
424 <#if lang?has_content> 
425 <#assign 
426 languages = languages + [ 
427
428 "key": pdf_language, 
429 "value": FrontendService.language.getLocaleByKey(pdf_language).getDisplayLanguage(), 
430 "url": dMTLink 
431 }] 
432 /> 
433 </#if> 
434 </#if> 
435 </#list> 
436 </#if> 
437 </#if> 
438 <#recover> 
439 </#attempt> 
440 
441 <#if (languages?size > 0)> 
442 <#attempt> 
443 <#assign 
444 data = data + { "languageSelect": { 
445 "id": "languageSelect", 
446 "name": "languageselect", 
447 "entries": languages, 
448 "documents": "", 
449 "button": "true" 
450 }} 
451 /> 
452 <#recover> 
453 </#attempt> 
454 </#if> 
455 
456 <@PMIntro "ADT_KASDE_DYNAMIC_INTRO" data AMMetadata AMDatetime "bottom" /> 
457 ${FrontendService.article.getEditArticleHtml(primaryKey, themeDisplay)} 
458 
459 <#if data.meta?has_content> 
460 <#if data.meta.laufendenummer?has_content !isACColorScheme() && !isVLCColorScheme() && !isDPMColorScheme()> 
461 <div>  
462 <div id="publicationVerbundPagination"> 
463 <@AMPublicationCarousel data.meta.laufendenummer data.meta.date data.meta.coverImg /> 
464 </div> 
465 </div> 
466 </#if> 
467 </#if> 
468 
469<#elseif (editmode?? && editmode)> 
470 <@errorMessage languageUtil.get(locale, "kein.journalArticle.gefunden") "ADT_KASDE_DYNAMIC_INTRO" layouttpl currentUrl /> 
471</#if> 

Asset Publisher

Was und warum wurde gewählt

Am 07. April 2021 fand in Südkorea eine Reihe von insgesamt 21 Wahlen auf kommunaler Ebene statt. Im Zentrum der Aufmerksamkeit standen dabei eindeutig die Wahlen zur Neubesetzung der vakanten Bürgermeisterposten in der Hauptstadt Seoul sowie der zweitgrößten Stadt Busan, die zusammen etwa ein Viertel der Gesamtbevölkerung des Landes beheimaten.

Darüber hinaus gilt die Position des Bürgermeisters der Hauptstadtmetropole als das zweitmächtigste Amt des Landes nach dem des Staatsoberhaupts. Die Wahlen werden daher vor allem auch als Vorzeichen für die Präsidentschaftswahl zur Nachfolge von Moon Jae-In gewertet, dessen Amtszeit nächstes Jahr endet.

Die beiden Bürgermeisterwahlen und ihr Zeitpunkt sind auch deshalb besonders, weil sie nur über die Nachbesetzung für bereits laufende Amtszeiten dienen, deren Rest ebenso nur noch ein gutes Jahr beträgt. Im April 2020 hatte der vorherige Amtsinhaber in Busan Oh Keo-Don als Folge eines Belästigungsskandals seinen Rücktritt erklärt. Park Won-Sun, der als Bürgermeister von Seoul mit ähnlichen Anschuldigungen konfrontiert war, wurde im Juli 2020 tot aufgefunden.

Wer wollte gewählt werden

Oh Keo-Don und Park Won-Sun, deren Rücktritt bzw. Tod die Nachwahlen notwendig machten, waren beide Mitglieder der Democratic Party of Korea (DPK) oder Minju-Partei, der auch Präsident Moon angehört. Deren Parteistatut sah eigentlich keine eigenen Kandidaturen für vorzeitige Wahlen vor, die von ihren Mitgliedern verursacht wurden. Diese bemerkenswerte Regelung hätte wohl zweifellos greifen müssen – wurde aber kurzerhand rechtzeitig abgeschafft.

Ohne erwähnenswerte Konkurrenz stellte die Minju mit Frau Park Young-Sun in Seoul und Herrn Kim Young-Choon in Busan zwei ehemalige Abgeordnete des Nationalparlaments und vorherige Mitglieder der Moon-Regierung als Kandidaten auf. Nach kurzen, intensiven Verhandlungen vermochte es Park wie Kim auch die übrigen, kleineren Parteien des progressiven Lagers von sich als gemeinsame Kandidatin zu überzeugen.

In den Reihen der Opposition war der Nominierungsprozess komplizierter. Während in der traditionell konservativen Hafenstadt Busan Park Hyung-Joon sich ähnlich früh ein gemeinsames Ticket sichern konnte, hatten es die Konservativen in Seoul nicht geschafft, sich bis zur Anmeldefrist am 19. März auf einen Kandidaten zu einigen. Die Niederlage gegen Oh Se-Hoon (People Power Party) in einer nicht öffentlichen Umfrage zu ihren Unterstützungswerten bewegte allerdings wenige Tage später den Vorsitzenden der People’s Party Ahn Cheol-Soo zum Rückzug seiner Kandidatur. Allgemeine Umfragen hatten zu dieser Zeit in der Dreier-Konstellation ein knappes Rennen, für einen gemeinsamen konservativen Kandidaten aber bereits einen deutlichen Vorsprung vorhergesagt.

Oh Se-Hoon, PPP, Seoul

Oh Seo-Hoon war von 2000 bis 2006 Mitglied der südkoreanischen Nationalversammlung, bevor er bereits als Vorgänger des verstorbenen Park Won-Sun für fünf Jahre das Rathaus der Hauptstadt leitete. Trotz Wiederwahl trat Oh 2011 von diesem Posten zurück, nachdem er sich in einem Volksentscheid nicht mit der Abschaffung des unabhängig vom Einkommen der Eltern kostenlosen Mittagessens in Seouls Schulen durchsetzen konnte.

Park Young-Sun, Minju, Seoul

Park Young-Sun war von 2004 bis Mai 2020 Mitglied der Nationalversammlung und machte sich dort unter anderem als erste Frau im Vorsitz des Justizausschusses sowie als Sprecherin der damaligen Opposition (2014) bekannt. 2011 hatte sie bereits für die Nachfolge von Oh Se-Hoon kandidiert, aber dann zugunsten von Park Won-Sun zurückgezogen, gegen den sie 2018 dann nochmals in den Vorwahlen ihrer Partei unterlag. 2019 wurde sie zur Ministerin für Kleine und Mittelständische Unternehmen und Start-Ups ernannt, bis sie im Januar zurücktrat und ihre Kandidatur verkündete.

Park Hyung-Joon, PPP, Busan

Park Hyung-Joon war ebenso Mitglied der Nationalversammlung (2004-2008), politischer Sekretär des Präsidenten Lee Myung-Bak (2009-2010), sowie Generalsekretär der Nationalversammlung (2014-2016), bevor er die politische Bühne vorübergehend verließ. Sein Versuch zur Rückkehr ins Nationalparlament im vergangenen Jahr war nicht erfolgreich, allerdings kehrte er dennoch in die konservative Partei zurück.

Kim Young-Choon, Minju, Busan

Wie die drei Vorgenannten gehörte Kim Young-Choon zuvor bereits dem Nationalparlament an, nämlich von 2000 bis 2008, sowie von 2016 bis Mai 2020, bevor er von Juni bis Dezember 2020 als dessen Generalsekretär fungierte. Von 2017 bis 2019 war er außerdem erster Fischereiminister im Kabinett von Moon Jae-In.

Wer hat wen warum gewählt

Der Sieg der Konservativen in Busan war angesagt. Mit 63 Prozent der Stimmen und einem Vorsprung von knapp 30 Prozent konnte Park Hyung-Joon die Erwartungen aus den Umfragen erfüllen. Die Stadt ist damit ihren Traditionen gerecht geworden: Wichtige konservative Figuren haben hier ihre Wurzeln. Die Amtszeit des Progressiven Oh Keo-Don war insofern eine Ausnahme von der Regel gewesen und ein Nebeneffekt des konservativen ‚Zusammenbruchs‘ nach den Präsidentschaften von Lee Myung-Bak und vor allem Park Geun-Hye, sowie insbesondere der damaligen Unterstützung für die von Moon Jae-In getragene Gipfeldiplomatie mit Nordkorea.[1]

Den zwar ebenso jüngsten Umfragen entsprechenden, ähnlich klaren Sieg der PPP in Seoul (58 zu 39 Prozent) hingegen hätte nach dem Fiasko der Parlamentswahlen im vergangenen Jahr – bei dem die Konservativen ihr historisch schlechtestes Ergebnis eingefahren hatten und noch tiefer in die Krise gestürzt waren[2] – wohl kaum jemand vorhergesagt. Doch seitdem ist viel passiert.

Die Zufriedenheit mit der Regierungsstrategie zur Pandemiebekämpfung ist angesichts (auf niedrigem Niveau) oszillierender Fallzahlen, wiederholt fortgesetzten Versammlungseinschränkungen (bei unverändertem Ausbleiben eines Lockdowns) und dem Beginn einer vierten (kleinen) Welle gesunken, obwohl das Land im internationalen Vergleich weiterhin sehr gut dasteht.[3]

Stattdessen sind die Wahlergebnisse diesmal ein Zeugnis von Unzufriedenheit mit der nationalen Regierung. Moon Jae-In scheint angeschlagen, seine Zustimmungswerte in der Bevölkerung haben Tiefstände erreicht. Die Spannungen mit Nordkorea nehmen zu und nähren Kritik an seinem unveränderten Versöhnungswillen.[4]

Weder Park Young-Sun noch Kim Young-Choon haben seine Unterstützung im Wahlkampf gesucht, gemeinsame Fotos mit dem Präsidenten suchte man in ihren Wahlkampfunterlagen vergeblich. Vor allem sind es Wirtschafts- und Sozialpolitik, Zweifel an seinem Kompass und Image, die auch die Partei auf Abstand zu Moon gehen lassen:

„’We will look back on whether the government and the ruling party lived up to the public's hopes of building a better country and establishing justice and fairness in our society,’ Rep. Lee Nak-yon of the DPK said during a press conference, Wednesday. Lee, the first prime minister of the Moon administration, is currently co-chairing the party's election committee for the by-elections."[5]

Größter Stein des Anstoßes und von überragender Bedeutung in Seoul waren mangelnde Erfolge der Regierung bei der Bekämpfung preistreibender Immobilienspekulationen bei gleichzeitig immer wieder ans Licht kommender Verwicklung und Nutznießerei bei derartigen Geschäften durch Entscheidungsträgerinnen und Entscheidungsträger und Beamte beziehungsweise deren Familien und Umfeld. Ein besonders prominentes Beispiel lieferte die Immobilienagentur Land and Housing (LH): Moons zuständiger Minister für Land, Infrastruktur und Transport, Byeon Chang-Heum, leitete diese Agentur noch bis letzten Dezember und bot seinen Rücktritt an, nachdem die Staatsanwaltschaft Ermittlungen wegen verdächtiger Landerwerbe in direkter Nachbarschaft eines Entwicklungsprojekts kurz vor dessen Verkündung gegen fast 400 Personen einleitete, darunter Dutzende Angestellte von Land and Housing, Staatsbedienstete und auch Abgeordnete.[6] Der Präsident entschuldigte sich, aber beließ den Minister im Amt.

Die Minju-Kandidaten versuchten vergeblich mit vergleichenden Vorwürfen und Angriffen gegen ihre beiden Kontrahenten zu kontern: Oh Se-Hoon habe damals als Bürgermeister seine Frau und Familie ebenfalls profitieren lassen und auch Park Hyung-Joon sei über seine Familie in derartige Immobiliengeschäfte involviert.[7]

Für die Entscheidung der Wählerinnen und Wähler in Busan waren einer Umfrage im Wahlkampf zufolge lokale Wirtschaftsaussichten wichtiger, die in Pandemiezeiten besonders durch die große Bedeutung von Tourismus und internationalen Handelsströmen für die Hafenstadt getrübt sind. Die von Moon unterstützte Idee, das lange geplante Projekt eines neuen Flughafens zu beschleunigen, hat wohl allerdings wenig genutzt:

"Ninety percent of companies in Busan are small operations with fewer than 30 people, and they've had to deal with difficulties, such as layoffs and restructuring. But instead of policies to help them, tens of millions in taxpayer funds are being poured into the Gadeok Island Airport"[8]

Drei zusätzlich bemerkenswerte Aspekte:

  • Die PPP erhielt in Seoul die Mehrheit in fast allen Altersklassen und dabei insbesondere auch bei den 20- bis 30-Jährigen, die bislang eher dem Minju-Lager zugewandt waren.
  • Diese Gruppe ist wiederum stets überproportional unter denen vertreten, die bereits vorab an die Urnen schreiten: etwa ein Fünftel der Wählerinnen und Wähler verzeichneten dieses Mal einen Rekordwert für das early voting am vergangenen Wochenende, worüber sich auch die PPP wohl zurecht freute.[9]
  • Wahlberechtigte, die wegen COVID-Kontakten unter Quarantäne standen, konnten mit besonderer Erlaubnis der für sie zuständigen Gesundheitsbehörden ihre Stimme übrigens nach der regulären Schließung der Wahllokale gesondert abgeben.[10]

Die Wahlbeteiligung lag mit 58.2% in Seoul und 52.7% in Busan bei derartigen Zwischenwahlen erstmals über 50%. In 13 der übrigen 19 Wahlen des Tages siegte ebenfalls die PPP.

Was wird weiter werden

Das Wahlergebnis bedeutet einen starken Schlag für die Minju-Partei und Präsident Moon Jae-In. Für sein letztes Jahr im Amt schrumpfen damit politisches Kapital und Handlungsspielraum. Er kommt wohl kaum umher zu prüfen, ob sein Fokus auf Fortschritte in den Beziehungen zu Pjöngjang weiter tragbar oder nicht doch mehr Konzentration auf die offenbar für die Bevölkerung wichtigeren innenpolitischen Themen die bessere Option ist, um die Erinnerung an seine Amtszeit zum Ende positiv zu prägen. In der Minju dürften sich derweil die Flugkräfte ihm gegenüber weiter verstärken. Die Zeichen stehen auf Neustart: Anfang Mai besetzt die Partei erneut ihren Vorsitz, denn der im letzten August auserkorene ehemalige Premierminister Lee Nak-Yon ist wie erwartet schon wieder zurückgetreten – fristgerecht um seine Präsidentschaftskandidatur zu ermöglichen.[11] Dort könnte er in der Vorwahl auf den populären Governeur der Provinz Gyeonggi Lee Jae-Myung, den ehemaligen Justizminister Choo Mi-Ae und wohl auch seinen Nachfolger treffen: Premier Chung Sye-Kyun hatte eine Erklärung nach den Wahlen angekündigt und braucht gegebenenfalls auch eine Nachfolge. Am Tag nach der Wahl nahm die kommissarische Minju-Führung samt Fraktionschef geschlossen den Hut. Eine Handvoll Baustellen.

Die Konservativen könnten dagegen geneigt sein, Morgenluft zu wittern, doch bleiben neben Inhalten genauso viele personelle Fragen zu klären, bevor sich ein klares Bild für 2022 erkennen lässt:

  • Der Interims-Vorsitzende Kim Chong-In ist ebenso zurückgetreten. Auch die PPP braucht wieder eine neue Parteiführung.
  • Die Chancen für Park Hyung-Joon auf eine Wiederwahl nächstes Jahr scheinen angesichts der Vorwürfe gegen ihn wenig sicher, Oh Se-Hoon will vielleicht nicht wieder antreten. Die Suche einer geeigneten Nachbesetzung für Seoul und Busan könnte fast nahtlos von vorne losgehen.
  • Auch für das Präsidentenamt ist niemand ausgemacht. Der zurückgetretene Generalstaatsanwalt Yoon Seok-Youl, der zurzeit in Umfragen führt,[12] will sich noch nicht erklären, ob er bereit ist, für die Konservativen anzutreten.
  • Als Lektion aus dem gemeinsamen Erfolg mehren sich zudem Gerüchte, dass sich PPP und People’s Party zu einer neuen „Anti-Moon“-Formation zusammenfinden könnten. Ungewöhnlich wäre das nicht.

Vor allem gilt sich also bewusst zu bleiben, wie viel sich die politischen Rahmenbedingungen im verbleibenden Jahr bis zu den Präsidentschaftswahlen wohl noch verändern werden. Die Zeit bis dahin ist ähnlich lang wie jene, die seit den Parlamentswahlen vergangen ist!

Fazit

Die Siege der Opposition in Seoul und Busan haben die Perspektiven für beide Seiten des politischen Spektrums erwartungsgemäß auch auf der nationalen Ebene massiv verändert.

Die Regierung von Moon Jae-In erscheint zusätzlich geschwächt für den unverändert, wenn nicht sogar zunehmend schwierigen Auftrag, das Land in Mitten von Pandemie und Pjöngjang mit Prioritätensetzung in Außen- aber vor allem auch Innenpolitik auf Kurs zu halten.

Die Interessen von Regierung und Regierungspartei könnten dabei vor allem dann auseinanderlaufen, wenn der Präsident nicht schnell wieder Aufwind genießt.

Doch die Progressiven abzuschreiben und für nächstes Jahr einen Wechsel im Blue House vorauszusagen, ginge sicherlich einige Schritte zu weit. Für die zuletzt so arg gebeutelten Konservativen ist die Fähigkeit, Wahlen zu gewinnen, durchaus ein wichtiges Signal der Erholung, aber noch lange kein Beweis einer wirklich nachhaltigen Trendwende.

Die denkbar scheinenden Szenarien sind vielmehr wieder vielfältiger und offener geworden - man könnte geneigt sein zu sagen, weniger über- oder gar durchschaubar.

-----------------------------------------

[1]      Konrad-Adenauer-Stiftung, https://www.kas.de/de/web/korea/laenderberichte/detail/-/content/gutes-zwischenzeugnis-praesidentenpartei-bei-regionalwahlen-in-suedkorea-bestaetigt

[2]      Konrad-Adenauer-Stiftung, https://www.kas.de/de/web/korea/laenderberichte/detail/-/content/corona-corona-corona

[3]      Konrad-Adenauer-Stiftung, https://www.kas.de/de/web/korea/laenderberichte/detail/-/content/covid-19-und-digitalisierung

[4]      Konrad-Adenauer-Stiftung, https://www.kas.de/de/web/korea/laenderberichte/detail/-/content/anytime-anywhere-zur-aktuellen-nordkoreapolitik-seouls

[5]      Korea Times, http://www.koreatimes.co.kr/www/nation/2021/04/356_306482.html

[6]      Diplomat, https://thediplomat.com/2021/03/land-speculation-scandal-grips-south-korea/

[7]      Yonhap, https://en.yna.co.kr/view/AEN20210406011200315

[8]      Nikkei Asia, https://asia.nikkei.com/Spotlight/Asia-Insight/Moon-promises-the-sky-in-Busan-but-faces-electoral-crash-landing

[9]      Korea Times, https://www.koreatimes.co.kr/www/nation/2021/04/356_306589.html

[10]    Korea Times, http://www.koreatimes.co.kr/www/nation/2021/04/356_306718.html

[11]    Konrad-Adenauer-Stiftung, https://www.kas.de/de/web/korea/laenderberichte/detail/-/content/der-isolierte-vorsitzende-der-80-jaehrige-reformer-und-die-lahme-ente

[12]    Korea Times, http://www.koreatimes.co.kr/www/nation/2021/04/356_306662.html

Asset Publisher

Contact

Thomas Yoshimura

Thomas Yoshimura

Resident Representative in Korea Interim Head of the Japan office until July 2024

thomas.yoshimura@kas.de +82 2 793 3979

comment-portlet

Asset Publisher

Asset Publisher

About this series

The Konrad-Adenauer-Stiftung is a political foundation. Our offices abroad are in charge of over 200 projects in more than 120 countries. The country reports offer current analyses, exclusive evaluations, background information and forecasts - provided by our international staff.