JSP vs Spring Thymleaf

Dimax

Top Contributor
Hallo ,könnte mir jemand erklären warum funktioniert folgendes einwandfrei->

Code:
<iframe id="QuellTEXT" name="QuellTEXT" height="500" width=95%
            src="AnzeigedesQuelltextes.jsp?ProjektID=<%=ProjektID%>&ProgrammSELECT=<%=ProgrammSELECT%>">
  </iframe>

und beim Versuch dasselbe mit Spring ->
Code:
<iframe id="QuellTEXT" name="QuellTEXT" height="500" width=95%  src="${path}"> 
        <div th:insert='../blocks/AnzeigedesQuelltextes.html ::anzeigeProgQuell'> </div>
 </iframe>

bekomme ich

Unbenannt1.pngUnbenannt2.png

Oder wie macht man das richtig?
 

KonradN

Super-Moderator
Mitarbeiter
Hast Du mal versucht, nach den Fehlermeldungen zu suchen? Das ist immer der schnellste Weg:

 

Dimax

Top Contributor
Sicher habe ich versucht, aber das waren alle in der falsche Richtung. Browser Einstellungen usw.
Dein Post hat mir geholfen .Habe configure Methode erweitert und jetzt läuft.
 

Dimax

Top Contributor
Es gibt aber immer noch Probleme,
Die insertete Seite wird als text erkannt und nicht angegezeigt im iframe drin.
Unbenannt.png
 

KonradN

Super-Moderator
Mitarbeiter
Also da sehe ich jetzt erst einmal nicht genug Informationen um dazu etwas zu sagen. Was natürlich direkt auffällt ist, dass das wohl an die html Seite angefügt und nicht eingefügt wurde. Kommt das mit dem html Tag vom iFrame? Oder woher kommt das? Kannst Du evtl. sowas wie ein minimales Beispiel geben?

(So Fehle von spring Security sind meist einfach aufzuzeigen, aber da braucht man jetzt vermutlich etwas mehr Daten.)
 

Dimax

Top Contributor
also wenn ich die iframe so mache->
Code:
  <iframe id="QuellTEXT" name="QuellTEXT" height="500" width=95% 
         th:insert='../blocks/AnzeigedesQuelltextes.html ::anzeigeProgQuell'>
        </iframe>
dann bekomme ich ->
Unbenannt.png
wenn ich aber so mache ->
Code:
 <iframe id="QuellTEXT" name="QuellTEXT" height="500" width=95% 
         th:replace='../blocks/AnzeigedesQuelltextes.html ::anzeigeProgQuell'>
        </iframe>
Dan wird iframe durch den div, das als Fragment gebaut ist-ersetzt>
Code:
<div th:fragment="anzeigeProgQuell" style="margin-bottom:5%;">
<table border=0 cellspacing=0>
    <tr th:each="elZnr :${quell}" >
        <td align=left><a name="zeile" th:text="${elZnr.getZeilen_nr()}" ></a>
        <span>.</span>
            <span th:text="${elZnr.getZeilenInhalt()}"></span>
        </td>
    </tr>
</table></div>
und es wird ohne iframe angezeigt->
Unbenannt.png
 

KonradN

Super-Moderator
Mitarbeiter
Was mir auffällt und was falsch sein dürfte:
In Deinem iframe hast Du erst ein <html>...</html> und dann kommt erst der Rest. Das willst Du aber doch so nicht haben.

Also beim iframe aus #1 das src weg und das div mit th:replace wäre jetzt so ein Ansatz, was ich etwas probieren würde. Aber ich habe schon zu lange nichts mehr mit Thymeleaf gemacht und html/JS/css war noch nie meine Welt so dass ich da immer nur etwas weniger gemacht habe.

Also was ich beschrieben habe, wäre etwas wie das:
Java:
<iframe id="QuellTEXT" name="QuellTEXT" height="500" width=95%>
        <div th:replace='../blocks/AnzeigedesQuelltextes.html ::anzeigeProgQuell'> </div>
 </iframe>

Was kommt dann dabei raus?
 

sascha-sphw

Top Contributor
Also th:replace in Thymleaf ist ja auch genau für diesen Fall gemacht, es ersetzt den Tag mit dem inhalt von th:replace. Nachdem das bei dir der iframe ist, wird er entfernt.

Wie @KonradN schon gezeigt hat. Nur verwende ich dann ganz gerne th:block da dieser Tag ja ohnehin ersetzt werden soll.
HTML:
<iframe id="QuellTEXT" name="QuellTEXT" height="500" width=95%>
    <th:block th:replace='../blocks/AnzeigedesQuelltextes.html ::anzeigeProgQuell' />
 </iframe>
 

Oneixee5

Top Contributor
Ich bin erstaunt, dass niemand das iframe an sich in Frage stellt. Folgend ein Blogbeitrag, der leider nicht mehr online ist:

Es scheint, dass bei jedem Auftrag, an dem ich arbeite, das gleiche Thema auftaucht. Irgendwann sagt jemand: "Benutzen Sie dafür doch einfach einen iFrame". Dann muss ich den alten, müden Weg einschlagen, warum das keine gute Idee ist.

Nun, dieser Artikel wird ein wenig utilitaristisch für mich sein. Ich hoffe, dass ich alle Gründe, warum iFrames kein Allheilmittel sind, an einer einzigen Stelle zusammenfassen kann, so dass ich mir in Zukunft etwas Zeit sparen und die Leute einfach auf diese URL verweisen kann. Daher werde ich diesen Beitrag gelegentlich aktualisieren, wenn ich diese Punkte verfeinere. Fühlen Sie sich frei, diesen Beitrag für den gleichen Zweck zu verwenden, wenn Sie möchten, und posten Sie bitte alle Vorschläge oder Punkte, die ich übersehen habe, auf meinem Twitter-Account (@rwbDev ), ich werde Sie sicher nennen, wenn ich den Punkt zu diesem Artikel hinzufüge.

Lassen Sie mich eines klarstellen: iFrames haben einen guten Zweck. Ich selbst habe iFrames schon oft mit großem Erfolg eingesetzt. Das Problem ist, dass die Leute dazu neigen, sie zu benutzen, um eine schlechte Architektur zu umgehen oder um ein Problem einfach zu lösen. Meiner Erfahrung nach wird dadurch in der Regel nur ein kleines Problem gegen ein viel größeres Problem eingetauscht, und meistens ist es ein unnötiger Kompromiss. Auf diese beiden Punkte werde ich im Folgenden eingehen.

Schlecht für SEO. Dies ist einer der häufigsten Gründe, warum Sie iFrames meiden sollten. Einige Suchmaschinen können Schwierigkeiten mit den Seiten haben, auf die in iFrames verwiesen wird. Inwieweit sich dies auf das Suchranking einer Website oder Seite auswirkt, ist nicht vollständig bekannt. Die meisten Experten, mit denen ich gesprochen habe, sind sich jedoch einig, dass es definitiv einen gewissen Einfluss hat. Schauen Sie sich diesen interessanten Beitrag über den Wendekreis an. Wenn Sie mehr darüber erfahren möchten, wie SEO funktioniert und welche Auswirkungen Designentscheidungen wie diese haben, empfehle ich Ihnen seomoz.org. Dies ist natürlich kein Problem, wenn SEO für Ihre Seite oder Anwendung kein Thema ist. Zum Beispiel eine Anwendung, die ein Login erfordert (alle Seiten hinter dem Login sind für die Suchmaschinen ohnehin nicht zugänglich). * Hinweis (hinzugefügt am 6. Juni 2013): Jüngste Tests haben gezeigt, dass Suchmaschinen tatsächlich Links innerhalb eines iFrames folgen können. Das bedeutet, dass die SEO-Auswirkungen eines iFrames viel geringer sind als in der Vergangenheit. Es ist immer noch unklar, ob es keine Auswirkungen gibt, und verschiedene Suchmaschinen können sich in dieser Hinsicht unterschiedlich verhalten.

Verlinkung/Lesezeichen. Wenn Sie kein zusätzliches JavaScript einführen, kann der Nutzer keinen direkten Link zu Inhalten innerhalb des iFrames erhalten. Dies gilt auch für Links, die jemand einem Freund per E-Mail schickt, Lesezeichen oder Seiten, die in einem Suchmaschinenergebnis auftauchen. Stellen Sie sich vor, Ihr Benutzer besucht Ihre Seite und ein Inhalt befindet sich in einem iFrame. Er klickt auf einen Link im iFramed-Inhalt. Dieser Inhalt verbleibt erwartungsgemäß innerhalb des iFrames. Nun findet Ihr Benutzer einen Inhalt, zu dem er innerhalb des iFrames navigiert hat, und möchte ihn an einen Freund senden. Das Kopieren der URL in den Browser funktioniert jedoch nicht, da dies den Freund nur auf die ursprüngliche Seite mit dem im iFrame angezeigten Inhalt schicken würde. Es gibt Skripte, mit denen man dieses Problem umgehen kann. Ich habe sie selbst ein paar Mal implementiert (in Situationen, in denen ich keine andere Wahl hatte). Diese führen jedoch oft zu eigenen Problemen und haben oft Probleme mit der Kompatibilität zwischen verschiedenen Browsern. Oft sind sie auch einfach nur fehlerhaft. Auch hier gilt wieder: Je nach Website oder den Anforderungen Ihrer Anwendung ist dies vielleicht kein Problem, aber für die meisten Websites ist es ein großes Problem.

Schwierigkeiten bei der Fehlersuche. Dieser Punkt wird oft übersehen. Wenn Sie eine robuste Anwendung mit komplexem jQuery, Ajax und anderen coolen Dingen haben, die überall auf der Seite passieren, können iFrames das Debuggen eines Problems sehr viel schwieriger machen. Tritt der Fehler auf der äußeren Seite oder auf der Seite innerhalb des Frames auf? Browser-Entwicklungstools können dabei helfen, aber selbst diese Tools machen nicht immer klar, wo das Problem liegt, wenn man es mit einem iFrame zu tun hat. Sie wären überrascht, wie oft ein Fehler auftritt, wenn sich eine Seite innerhalb eines iFrames befindet, aber problemlos funktioniert, wenn sie außerhalb des iFrames geladen wird. Dies ist ein Problem für jede Website. Aber besonders für Websites, die iFrames ausgiebig nutzen. Je mehr bewegliche Teile es in einem System gibt, desto schwieriger ist es, ein Problem zu diagnostizieren.

Es ist einfach schwierig, sie stabil zu halten. Es gibt eine große Website aus einem früheren Job von mir, die iFrame ausgiebig verwendet. Ich bin mir nicht sicher, inwieweit das NDA hier gilt, daher werde ich sicherheitshalber keinen Link zu ihrer Website setzen. Sie verwenden sie häufig und haben alle Skripte und ausgefallenen Tricks, um (theoretisch) die normalen Nachteile der Verwendung von iFrames zu vermeiden. Dennoch kommt es immer wieder zu Problemen und Fehlern auf ihrer Website, die auf den häufigen Missbrauch und die Überbeanspruchung von iFrames zurückzuführen sind. Auch in Foren, auf LinkedIn, Twitter usw. gab es häufig Kundenbeschwerden über die Probleme, die ihnen dadurch entstanden. Gerade eben habe ich ihre Website besucht und innerhalb weniger Minuten eine Seite gefunden, die mir aufgrund eines iFrame-Problems einen Fehler anzeigte. Das sind kluge Leute, die die Probleme mit iFrames gut kennen. Doch selbst sie kämpfen noch Jahre später damit. Wenn iFrames so missbraucht werden wie auf dieser Website, kann kein noch so ausgefallenes Skript die Probleme lösen, die unweigerlich auftreten werden.
 

Dimax

Top Contributor
also wenn ich so mache ->
Code:
<iframe id="QuellTEXT" name="QuellTEXT" height="500" width=95%>
    <th:block th:replace='../blocks/AnzeigedesQuelltextes.html ::anzeigeProgQuell' />
 </iframe>
kommt dieses BildUnbenannt.png
ich weis nicht warum dieses Grund html Gerüst davor kommt ,ist bei mir nur einmal ,
 

Dimax

Top Contributor
warum iFrames kein Allheilmittel sind
Ich benutze 2 iframes auf einer Seite im internen Projekt. In einem iframe ist der Text gespeicher mit Verankerungen an Zeilennummer.In zweitem iframe werden bestimmte Wörter dargestellt mit Verweis auf die Zeile im Ersten iframe wo diese Wörter im Text sind. Also die iframes dienen nur als GUIn ,keine Suche und keine Verweise auf die iframes sind vorgesehen.
 

Dimax

Top Contributor
Der User drückt auf das Wort Hallo im iframe 2 und iframe 1 wird gescrollt bis zur Zeile wo das Wort Steht. Es ist sehr praktisch bei einem Programm mit 2000 Zeilen bei klick auf gesuchte Funktion im Code hinspringen. Und das Funktioniert mit JSP 100%.Aber mit Spring klappt nicht bei mir.
 

mrBrown

Super-Moderator
Mitarbeiter
Der User drückt auf das Wort Hallo im iframe 2 und iframe 1 wird gescrollt bis zur Zeile wo das Wort Steht. Es ist sehr praktisch bei einem Programm mit 2000 Zeilen bei klick auf gesuchte Funktion im Code hinspringen. Und das Funktioniert mit JSP 100%.Aber mit Spring klappt nicht bei mir.
Dafür klingen iframes allerdings erst recht ziemlich überflüssig...
 

KonradN

Super-Moderator
Mitarbeiter
Das Verzeichnis templates ist ja für reine Templates. Diese werden nicht direkt aufgerufen sondern über Controller, da diese ja dynamisch mit Inhalt gefüllt werden.

Wenn es also ein Template ist, dann musst Du den entsprechenden Controller mit der dort hinterlegten URL aufrufen.

Wenn es statischer Inhalt ist, dann wäre der Ordner static der richtige Ort.
 

Dimax

Top Contributor
Oder muss man die Adresse im Controller
Dafür klingen iframes allerdings erst recht ziemlich überflüssig
warum das keine gute Idee ist.
Ich muss auf einer Seite dem User Quelltext eines Programms zeigen und neben dem Quelltext verschiedene Wörter , die beim Draufklicken den Quelltext scrollen bis auf die Zeilennummer wo dieses Wort im Quelltext steht. Wie kann man das am besten lösen in einem Spring Projekt?
 

Dimax

Top Contributor
Wenn es also ein Template ist, dann musst Du den entsprechenden Controller mit der dort hinterlegten URL aufrufen.
Ja klar leuft es alles über ein Controller:->
Java:
@PostMapping("/Auswertung")
    public String anzeigenVonProgrammen(@RequestParam String ProgrammSELECT,@RequestParam String ProjektID,Model model) {
        Programm prog=progRepository.findById(Integer.valueOf(ProjektID),Integer.valueOf(ProgrammSELECT));
        Projekt proj=projektRepository.findByProjektId(Integer.valueOf(ProjektID));
        ArrayList<Quelltext> quell=quellRepository.findByProjAndProgId(Integer.valueOf(ProjektID),Integer.valueOf(ProgrammSELECT));
        int countZeilenImProjket=quellRepository.countZeilenImProjekt(Integer.valueOf(ProjektID));
        int countZeilenImProgramm=quellRepository.countZeilenImProgramm(Integer.valueOf(ProjektID),Integer.valueOf(ProgrammSELECT));
        
        //System.out.println("pr->"+prog.getProgrammId()+" |2->"+proj.getProjektId()+" |3->"+prog.getHinzugefuegt());
        model.addAttribute("proj", proj);
        model.addAttribute("prog", prog);
        model.addAttribute("quell", quell);
        model.addAttribute("countZeilenImProjekt",countZeilenImProjket);
        model.addAttribute("countZeilenImProgramm",countZeilenImProgramm);
        model.addAttribute("path","../blocks/AnzeigeProgKennzahlen.html");
        model.addAttribute("path2","../blocks/AnzeigedesQuelltextes.html");
        return "/Auswertung";
    }
 

KonradN

Super-Moderator
Mitarbeiter
Das ist aber doch der Controller, der das Template Auswertung bedient.

Aber nun willst Du ja auf das AnzeigeDesQuelltextes.html zugreifen!

Also ich habe eine Geldbörse. Und ich biete (als Controller) eine Schnittstelle "bezahle" an. Das funktioniert super:
Wenn ich einkaufen gehe, dann ruft die Person an der Kasse einfach meine Schnittstelle "bezahle" auf und schon gebe ich dem Kassierer Geld aus meiner Geldbörse.

Aber das ist meine Geldbörse! Da kommt der Kassierer nicht dran! Der Kassierer kann nur mich (den Controller) ansprechen. Wenn der Kassierer nun das Bild meiner Frau sehen will, dann hat er keine Chance! Das ist in meiner Geldbörse aber selbst wenn er genau weiss, wo: Da kommt er nicht dran! Das ist direkt neben dem Geld, aber da gibt es keinen Zugriff zu!

Also wenn ich da Zugriff geben will, dann muss ich dem dazu Zugriff geben:
a) Ich kann als Controller anbieten: "zeigeFotoVonFrau" - dann würde ich das Foto nehmen und zeigen.
b) Ich kann es irgendwo öffentlich machen. Ich klebe mir das Foto z.B. auf die Stirn. Das wäre sowas wie das "static" Verzeichnis. Da sind Dinge, die alle direkt sehen können.

Aber egal wie - eines der Wege geht nur! Ein "Neben den Geldscheinen ist noch das Foto, das möchte ich haben" geht einfach nicht. Das ist von der Schnittstelle nicht vorgesehen.

Daher zwei Möglichkeiten:
a) Du schreibst einen Controller und der geht dann den Weg über ein template. Wenn es static ist, macht es wenig Sinn.
b) Du packst es in static. Dann ist es ebenso aufrufbar wie deine CSS / JS / Images.
 

Dimax

Top Contributor
a) Ich kann als Controller anbieten: "zeigeFotoVonFrau" - dann würde ich das Foto nehmen und zeigen.
Was ist wenn ich mehrere Frauen habe ? Wie sage ich dem Controller das Foto von der Frau Nummer 52 ? Das passiert doch im Get.->
Code:
<iframe id="QuellTEXT" name="QuellTEXT" height="500" width=95% src="/ZeigeQuellText?ProgrammSELECT='?????'&ProjektID='???'" >
damit ich im Controller dann ->
Code:
    @GetMapping("/ZeigeQuellText")
    public String zeigeQuellText(@RequestParam String ProgrammSELECT,@RequestParam String ProjektID,Model model) {
        Programm prog=progRepository.findById(Integer.valueOf(ProjektID),Integer.valueOf(ProgrammSELECT));
        Projekt proj=projektRepository.findByProjektId(Integer.valueOf(ProjektID));
        ArrayList<Quelltext> quell=quellRepository.findByProjAndProgId(Integer.valueOf(ProjektID),Integer.valueOf(ProgrammSELECT));
        model.addAttribute("proj", proj);
        model.addAttribute("prog", prog);
        model.addAttribute("quell", quell);
        return "/AnzeigedesQuelltextes";
    }
 

KonradN

Super-Moderator
Mitarbeiter
Ok, damit bist Du jetzt schon einmal weg vom src="../blocks/AnzeigedesQuelltextes.html"

Und das mit dem Request sieht prinzipiell gut aus - aber mich stören die Single Quotes. Die dürfen natürlich in keiner URL sein.

Ansonsten noch paar Fragen bezüglich paar Punkte, die zu prüfen wären:
- Hast Du die Datei AnzeigeDesQuelltextes in templates verschoben?
- Der Pfad /ZeigeQuelltext ist richtig oder hast Du da mehr aufgebaut? (Auf Controller Ebene z.B. einen Pfad für den Controller gesetzt oder so). Aber das müsstest Du ja dann gesehen haben mit dem Controller von /Auswertung - da hast Du dann ja auch die entsprechende URL schon gesehen.
- Was für Fehler / Meldungen bekommst Du? Welche URL ruft der browser auf (Developer Tools des Browsers sollten das zeigen).
 

Oneixee5

Top Contributor
Warum machst du:
Java:
public String zeigeQuellText(@RequestParam String ProgrammSELECT,@RequestParam String ProjektID,Model model) {
wenn du eigentlich:
Code:
public String zeigeQuellText(@RequestParam Integer ProgrammSELECT,@RequestParam Integer ProjektID,Model model) {
haben willst?
Eine Exception fängst du nicht ab, falls Integer.valueOf nicht funktioniert. Dann kannst du auch gleich den richtigen Datentyp verwenden.
 

Dimax

Top Contributor
- Hast Du die Datei AnzeigeDesQuelltextes in templates verschoben?
Ja, deswegen return "/AnzeigedesQuelltextes";
Der Pfad /ZeigeQuelltext ist richtig oder hast Du da mehr aufgebaut?
Damit rufe ich doch den Controller und sage im welches quelltext der mir liefern soll,nur ich weis nicht wie ich die id's per get mitgebe in jsp war so->
src="AnzeigeBibliothek.jsp?ProjektID=<%=ProjektID%>&ProgrammSELECT=<%=ProgrammSELECT%>"
aber wie mache ich das in Spring?
 

KonradN

Super-Moderator
Mitarbeiter
Das sollte eigentlich so durchaus in Ordnung sein - nur eben die Single Quotes stören mich etwas:
src="/ZeigeQuellText?ProgrammSELECT='?????'&ProjektID='???'" >
also ersetzen durch:
src="/ZeigeQuellText?ProgrammSELECT=?????&ProjektID=???" >

Das Single Quote wäre ansonsten URL Codiert ein %27, oder nicht?

Und in der JSP Seite hast Du die Zeichen ja auch nicht und wenn es Zahlen sind, dann gehören die da auch einfach nicht rein!
 

KonradN

Super-Moderator
Mitarbeiter
Selbstverständlich. Sonst macht es ja keinen Sinn. Aber halt nur die Zahlen und das ohne die single quotes:
src="/ZeigeQuellText?ProgrammSELECT=123&ProjektID=456"

und nicht:
src="/ZeigeQuellText?ProgrammSELECT='123'&ProjektID='456'"
 

Dimax

Top Contributor
src="/ZeigeQuellText?ProgrammSELECT=123&ProjektID=456"
Konrad)) Das Problem ist ,ich weiß nicht wie ich die Zahlen die ich auf der Seite habe da reinkriege))
Ich habe versucht mit thymleaf->src="/ZeigeQuellText?ProgrammSELECT=${prog.getProgrammId()}&ProjektID=${proj.getProjektId()}" das ist aber falsch ,gibt Fehlermeldung ->
Message Invalid character found in the request target [/ZeigeQuellText?ProgrammSELECT=${prog.getProgrammId()}&ProjektID=${proj.getProjektId()}]. The valid characters are defined in RFC 7230 and RFC 3986
 

KonradN

Super-Moderator
Mitarbeiter
Ich bin kein thymeleaf Experte - habe da vor einiger Zeit nur mal was gemacht und das ist somit gar nicht mein Thema. Daher hatte ich Dinge von Dir erst mal ohne weitere Änderungen übernommen. Aber ich meine, mich noch an ein paar Dinge erinnern zu können:

Wenn Du so thymeleaf Attribute hast (Also da Thymeleaf da Variablen ersetzen soll), dann war da eigentlich immer ein "th:" davor, also bei Dir vermutlich ein "th:src="...".

Und dann meine ich, dass da Variablen nicht so rein gequetscht werden können mit normalem Text. Ich kenne da in erster Linie Ausdrücke wie:
th:src="'/ZeigeQuellText?ProgrammSELECT=' + ${whatever} + '&ProjectID=' + ${whateverElse}"

Sprich Die single quotes sind einfach nur da, um dort String Literale zu erzeugen. Und damit hat man da dann eine String Concatenation wie auch in Java und co,

Aber wie gesagt: Habe ich lange nichts mehr mit gemacht und hat mich damals auch nur ein bisschen interessiert.

Generell wäre mein Ratschlag:

Die Dokumentation war zumindest damals sehr gut und sehr umfangreich und hat all so Dinge sehr gut behandelt. (Sorry, wenn ich jetzt die Zeit nicht habe, da die entsprechenden Stellen heraus zu suchen um meine Vermutungen zu bestätigen oder die 100% sichere, korrekte Lösung zu bringen.)
 

Dimax

Top Contributor
Ich bin kein thymeleaf Experte
Wie mach man es ohne thymleaf in Spring ,weil mit th gibt es Fehler->
Caused by: org.attoparser.ParseException: Could not parse as expression: "/ZeigeQuellText?ProgrammSELECT=' + ${prog.getProgrammId()} + '&ProjektID=' + ${proj.getProjektId()}" (template: "/Auswertung" - line 27, col 67)
 

KonradN

Super-Moderator
Mitarbeiter
Wie mach man es ohne thymleaf in Spring
Es gibt andere Alternativen. Ich selbst mag Vaadin, wenn ich diesbezüglich etwas machen muss. Aber ich vermeide es einfach so gut wie möglich. Ansonsten sind halt Angular und React die "üblichen" Wege für Frontends und Spring stellt Daten nur als Backend über Webservices zur Verfügung.

Zeig einfach mal direkt den Code von deinem iframe tag in CodeTags. Da ist ein Fehler im Ausdruck. Er meckert also nicht das th:src an sondern den Ausdruck selbst.

Wenn Das kein Tipp/Kopierfehler ist, fehlt da das erste Single Quote.

Du schreibst in double Quote den Ausdruck. Also ein th:src="<Ausdruck>"

Und der Ausdruck besteht dann aus eine Reihe von Elementen, die mittels + zusammen gefügt werden. Diese Elemente umfassen:
- String Literale. Das sind Strings in single quotes: 'Ich bin ein String Literal'
- Variablen / Aufrufen auf Variablen: ${ichBinEineVariableImModel}

Mit dem Verständnis solltest Du einen Ausdruck zusammen gebaut bekommen.
 

KonradN

Super-Moderator
Mitarbeiter
Einfach einmal ein paar Links heraus gesucht:
a) Die Geschichte mit den Attributen: https://www.thymeleaf.org/doc/tutorials/3.0/usingthymeleaf.html#setting-attribute-values
Hier findest Du die Erklärung, wie Du Attribute setzten kannst. Da gibt es 2 Möglichkeiten: th:attr und eben das Attribut, das man setzen will mit th: davor. Eine Liste mit möglichen Attributen findest Du da auch und da ist src auch aufgelistet.

b) Literale, speziell Text Literale: https://www.thymeleaf.org/doc/tutorials/3.0/usingthymeleaf.html#text-literals

c) Das mit den Ausdrücken findet sich in appending texts: https://www.thymeleaf.org/doc/tutorials/3.0/usingthymeleaf.html#appending-texts

Das wären dann die jeweiligen Punkte in der Dokumentation von Thymeleaf.
 

Ähnliche Java Themen

Neue Themen


Oben