Asset-Herausgeber

Fehler bei der Verarbeitung der Vorlage.
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-Herausgeber

Fotofinish – so knapp wie noch nie

Die wohl bemerkenswerteste Besonderheit der diesmaligen Präsidentschaftswahl in Südkorea ist das knappe Ergebnis. Die fast übertrieben regelmäßigen Umfragen hatten ein kontinuierlich wechselndes Bild gezeichnet, endeten vorschriftsgemäß in der Woche vor der Wahl und konnten letzte Entwicklungen in einer extrem volatilen Entscheidungssituation gar nicht mehr abbilden. Vorhersagen von Instituten und Analysten lagen teils deutlich auseinander. Selbst die Nachwahlbefragungen wiesen fast gleiche, aber umgekehrte Zahlen aus. Erst die Auszählung über Nacht brachte Klarheit. Lee Jae-myungs Vorsprung schmolz im Laufe des Abends zusammen. Nachdem die Hälfte der Stimmen ausgezählt war, übernahm Yoon die Führung. In den frühen Morgenstunden gratulierte Lee dem Sieger und gestand seine Niederlage ein: ein Gütezeichen der südkoreanischen Demokratie. Zusammen mit der hohen Wahlbeteiligung zeugt die Geste von der demokratischen Stabilität des Landes. Daran änderten auch Probleme bei Stimmabgaben aus der Quarantäne wenig.

 

Schlammschlacht schlägt Inhalte

Das präsidentielle System Südkoreas ist durch eine hohe Personalisierung geprägt. Im Mittelpunkt der Wahlkämpfe stehen die Kandidaten. Wichtiger als Inhalte und Parteizugehörigkeit ist das öffentliche Urteil über ihre persönliche Eignung. Der diesjährige Wahlkampf bildete keine Ausnahme. Vielmehr zeichnete er sich durch besonders harte Angriffe auf die jeweiligen Gegenkandidaten aus und gilt vielen als der bisher schmutzigste.

 

Die Kandidaten[i]

Bis letztes Jahr war die konservative Oppositionspartei People Power Party (PPP) noch durch ein Notkomitee geführt worden. Nachdem die Partei aber die Kommunalwahlen am 7. April 2021 mit einem Erdrutschsieg gewonnen hatte,[ii] übernahm der erst 36-jährige Lee Jun-seok die Führung. Zudem gelang es, die öffentliche Aufmerksamkeit auf die Kandidatenauswahl für die Präsidentschaftswahlen zu lenken. Lee Jun-seok konnte mit unter 40 Jahren selbst nicht antreten. In einem mehrstufigen Verfahren entschied sich die PPP gegen Bewerber aus den eigenen Reihen und für den ehemaligen Staatsanwalt Yoon Suk-yeol. Als Neuling in Partei und Politik setzte dieser sich mit einer Stimmenmehrheit der Parteimitglieder gegen seine Konkurrenz und ein gleichzeitig durchgeführtes öffentliches Votum durch.

Die progressive Regierungspartei Minju stellte den bisherigen Governeur Lee Jae-myung als ihren Kandidaten auf. Er hatte sich in einem parteiinternen Zweikampf gegen den früheren Premierminister Lee Nak-yon durchsetzen können. Eine der Stärken von Lee Jae-myung lag in einer bewussten Distanz zu inzwischen unpopulären Standpunkten der Regierung von Moon Jae-in.

Keiner der beiden Kandidaten konnte jedoch den Eindruck eines klaren Favoriten vermitteln. Yoon Suk-yeol und seine Kampagne litten unter einer anhaltenden Uneinigkeit mit und in der People Power Party (PPP). Auch Lee Jae-myung fehlte der uneingeschränkte Rückhalt seiner Partei, in der Anhänger von Moon Jae-in weiterhin wichtigen Einfluss haben. Dazu kam, dass die Integrität der beiden Kandidaten in den Augen der Bevölkerung durch Gerichtsverfahren und Verdachtsfälle von Korruption in ihrem direkten Umfeld oder sogar in der eigenen Vergangenheit gefährdet wurden. Umstände, welche die jeweilige Gegenseite fortlaufend versuchte, in den Mittelpunkt zu rücken.

Wichtiger Schlüssel zum Sieg dürfte eine erfolgreiche Ansprache junger Wählergruppen gewesen sein. Hierbei spielte neben den großen Fragen von sozialer Gerechtigkeit und Wohlstand, allen voran den extremen Preissteigerungen im Immobilienbereich, ein weiteres Thema eine besondere Rolle: Geschlechtergerechtigkeit. Yoon erntete im Wahlkampf viel Kritik und Zustimmung für seine Forderung, das Ministerium für Gleichberechtigung abzuschaffen. Im Endspurt vor dem Urnengang versuchte Lee hingegen sich als Kandidat für Feminismus und Gleichberechtigung zu präsentieren. Eine Position, der in der eigenen Partei teilweise mit Zurückhaltung begegnet wurde und in Teilen der Öffentlichkeit als Publicity Stunt bewertet wird.[iii]

 

Außen- und Sicherheitspolitik

Der extrem knappe Sieg von Yoon Suk-yeol wird mit Sicherheit Kompromisse fordern. Dies gilt zumal angesichts der anhaltenden Mehrheit der Minju-Partei im Parlament. Gleichzeitig zeichnen sich insbesondere auch in der Außenpolitik deutliche Veränderungen ab. Im Grundton versprach der Kandidat Yoon eine Abkehr von der strategischen Ambiguität im Austausch für mehr Prinzipienorientierung.[iv] Dahinter steht zunächst die Absicht zu einer sichtbaren Stärkung der Allianz mit den USA. Direkt am Morgen nach der Wahl führte Yoon sein erstes Telefongespräch mit US-Präsident Joe Biden. Gleichzeitig will Yoon die Verteidigungsfähigkeit Südkoreas stärken. Der noch engere Schulterschluss mit Washington wird vorrausichtlich auch eine noch klarere Koordinierung der eigenen Politik gegenüber China und Russland beinhalten. Trotzdem werden Südkoreas nationale Interessen und Abhängigkeiten auch zukünftig wahrscheinlich einer völligen Angleichung entgegenstehen. Besonders betont hatte Yoon auch seine Absicht, die Beziehungen mit Japan zu verbessern. Hierzu soll unter anderem mehr in die trilaterale Zusammenarbeit gemeinsam mit den USA investiert werden.

Auch in seinen Ansätzen gegenüber Nordkorea wird sich Präsident Yoon Suk-yeol wohl sehr deutlich von seinem Vorgänger Moon Jae-in unterscheiden. Seouls Prioritäten in den innerkoreanischen Beziehung werden sich absehbar in den kommenden Jahren zugunsten der Denuklearisierung Nordkoreas verschieben. Auf weitere Eskalationen aus Pjöngjang wird die südkoreanische Regierung unter Yoon mit weniger Kompromissbereitschaft reagieren. Selbstverständlich behält Südkorea aber das Interesse an einer friedlichen Lösung und substantiellen Verhandlungen, nun aber – im Einklang mit den USA – mit erkennbaren Vorbedingungen.

 

Parteien als Bauernopfer?

Für außenstehende Beobachter ungewohnt kam es auch bei dieser Präsidentschaftswahl zu einer vielleicht entscheidenden Neuordnung im Bewerberfeld: Neben Yoon und Lee hatte sich unter anderem auch Ahn Cheol-soo, der Parteichef der oppositionellen People's Party, für eine eigene Kandidatur entschieden. Seine Umfragewerte lagen zeitweise um 10 Prozent. Alleine schien er damit chancenlos, entschloss sich aber am 3. März nach zähem Ringen für einen Rückzieher zugunsten von Yoon Seok-youl:

 

„The two candidates met for about 2 1/2 hours from shortly after midnight until nearly 3 a.m. […]

They agreed to merge candidacies and parties without any conditions to honor the wishes of the majority of the people who wish for a change of government“[v]

 

Besonders bemerkenswert sogar für südkoreanische Verhältnisse, in denen es immer wieder zu Zusammenlegungen von Kandidaturen kommt, war der Zeitpunkt: Zum ersten Mal wurde eine Einigung auf einen gemeinsamen Kandidaten erst nach der offiziellen Anmeldefrist – unmittelbar vor dem Urnengang – erreicht. Tatsächlich war Ahn bis zuletzt auf Wahlzetteln aufgeführt und Stimmen der Südkoreanerinnen und Südkoreaner, die vorab im Ausland für ihn votiert hatten, wurden für ungültig erklärt.

Für Yoon könnte der Zusammenschluss mit Ahn das nötige Zünglein an der Waage gewesen sein. Vermutlich hatten sich seine Kampagnenstrategen aber ein deutlicheres Ergebnis erhofft. Tendenziell konservative Wähler dürften geneigt gewesen sein, ihre Stimme Ahn zu geben. Auf sie zielte der Schritt zur Einigung wohl ab. Gleichzeitig ist davon auszugehen, dass der inzwischen vierte Rückzieher Ahns im Laufe seiner Karriere auch einige Anhänger enttäuscht hat. Sie werden entweder zuhause geblieben sein oder das Lager gewechselt haben. Gleichzeitig wird das Bündnis der beiden konservativen Kandidaten aber auch unschlüssige liberale Wähler zum Urnengang für Lee mobilisiert haben. Spannend zu beobachten sein wird, welche Auswirkung die Vereinbarung auf die Kabinetts- und Politikgestaltung der neuen Regierung hat.

Eine Folge dieser neuen „Koalition“ wird ein erneuter Umbau der konservativen Parteienlandschaft sein. Ihre Stabilisierung dürfte sich damit trotz Wahlerfolg weiter verzögern. Auch bei dieser Wahl wurden die Parteien damit primär als Wahlplattform für ihre Kandidaten gesehen.

 

 

[i]       Konrad-Adenauer-Stiftung, https://www.kas.de/de/web/korea/laenderberichte/detail/-/content/praesidentschaftswahl-2022-korea-sucht-neue-gesichter

[ii]      Konrad-Adenauer-Stiftung, https://www.kas.de/de/web/korea/laenderberichte/detail/-/content/seoul-und-busan-haben-gewaehlt

[iii]     Konrad-Adenauer-Stiftung, https://youtu.be/JuHctS11dWU

[iv]     Foreign Affairs, https://www.foreignaffairs.com/articles/south-korea/2022-02-08/south-korea-needs-step

[v]      Yonhap News Agency, https://en.yna.co.kr/view/AEN20220303000956315

Asset-Herausgeber

Kontakt

Thomas Yoshimura

Thomas Yoshimura

Leiter des Auslandsbüros Korea Interimsleiter des Auslandsbüros Japan bis Juli 2024

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

comment-portlet

Asset-Herausgeber