2016-11-02 3 views
1

Ich bin neu in Thymeleaf und verschiebe einige Facelettseiten, um Thymelaf zu verwenden. Aufgrund des Altsystems, in dem ich arbeite, verwenden wir Thymeleaf 2.1.5 mit einer XML-Konfiguration.Thymeleaf: Nachricht als Parameter zu einer anderen Nachricht

Ich bin auf ein Problem gestoßen, das ich gekämpft habe, um angemessene Dokumentation für zu finden. Was ich versuche zu erreichen, ist lokalisierte Nachrichten als Parameter in anderen Nachrichten zu nehmen.

Ein Beispiel, das ich in mehreren Vorlagen haben, ist so etwas wie dieses

Some text string <a href="url">CLICK HERE</a> 

Wo die Eigenschaften Datei ist wie folgt:

some.text=Some text string {0} 
click.here=CLICK HERE 

Ich habe versucht, so etwas wie dies zu tun:

<p th:utext="#{some.text('<a th:utext="#{click.here}" href="url">')}"></p> 

aber hatte kein Glück, es zur Arbeit zu bringen.

Gibt es auch eine Möglichkeit, eine Zeichenfolge zu lokalisieren und ohne dass sie Teil eines eigenen dom-Elements ist? Zum Beispiel möchte ich so eine einzelne Zeichenfolge platzieren:

String 

Statt dessen:

<div> String </div> 

Keine Erkenntnisse wäre sehr willkommen. Vielen Dank.

Antwort

1

Dies funktioniert mit Thymeleaf 3 für Ihr konkretes Beispiel:

<p th:with="openTag='<a href=\'stackoverflow.com\'>',anchorLabel=#{click.here},closeTag='</a>'" th:remove="tag" th:utext="#{some.text(${openTag+anchorLabel+closeTag})}"></p> 

Leider um den Link in der Ausgabe Doppel zitiert produzieren scheint nicht zu funktionieren. Ich weiß nicht, ob Thymeleaf dies unterstützt. Ich werde aktualisieren, wenn ich einen Weg finde. Einfache Anführungszeichen scheinen jedoch zu funktionieren.

Aber im Allgemeinen suchen Sie wahrscheinlich nach einer Kombination von th:with, um Variablen zu erstellen. Was Ihre zweite Frage betrifft, werden Sie die Tags th:remove="tag" entfernen wollen.

Antwort nimmt eine Konfiguration wie:

@Bean 
public ThymeleafViewResolver viewResolver() { 

    ThymeleafViewResolver resolver = new ThymeleafViewResolver(); 
    resolver.setOrder(1); 
    resolver.setCharacterEncoding("UTF-8"); 
    resolver.setTemplateEngine(templateEngine()); 
    return resolver; 
} 

@Bean 
public ITemplateResolver webTemplateResolver() { 

    SpringResourceTemplateResolver resolver = new SpringResourceTemplateResolver(); 
    resolver.setPrefix("/WEB-INF/thymeleaf/"); 
    resolver.setTemplateMode(TemplateMode.HTML); 
    resolver.setCharacterEncoding("UTF-8"); 
    resolver.setSuffix(".html"); 
    resolver.setCacheable(false); 
    resolver.setOrder(2); 
    return resolver; 
} 
+0

Vielen Dank für die Antwort. Ich glaube, Sie haben mich fast dorthin gebracht, aber ich bekomme diesen Fehler: Der Wert des Attributs "th: with", das einem Elementtyp "null" zugeordnet ist, darf nicht das Zeichen "<" enthalten. Gibt es eine Möglichkeit, dies zu beheben, während immer noch nicht gescannter Text verwendet wird? –

+0

sind einer Ihrer Werte, die Sie null liefern? Ich würde auf 'klicken.hier " – bphilipnyc

+0

click.here ist nicht null, soweit ich das beurteilen kann. Ich kann es ohne die Parameter gut verwenden. Ich dachte, vielleicht müsste das '' 'in irgendeiner Weise entkommen, bin mir aber nicht sicher. –

0

Sie sollten wirklich die Textgenerierung mit i18n und den Link geteilt. Sie können den "some.text" in einen Bereich einschließen und anschließend den Link rendern. So vermeiden Sie utext und können den Link mit einem übersetzten Text auch dann richtig erzeugen, wenn das gewünscht ist.

Eine Möglichkeit, die Span in dem resultierenden HTML zu vermeiden, wäre die Verwendung des Attributs th:remove="tag".

Eine andere Lösung sollte jetzt möglich sein, indem Sie ein <th:block>...</> Element verwenden, wenn ich mich nicht irre, so dass Sie ein Tag danach nicht mehr entfernen müssen.

<span th:remove="tag" th:text="#{some.text}">some text that will be replaced but shows in the mock</span> <a href="url" th:text="#{click.me}">CLICK HERE</a> 
+0

Leider glaube ich nicht aufteilen ist eine Option. –

+0

Warum wäre das nicht möglich? Haben Sie nicht die volle Kontrolle über die Erstellung von Vorlagen und Nachrichten? –

Verwandte Themen