2016-11-02 3 views
1

저는 Thymeleaf를 처음 사용하고 일부 Facelets 페이지를 이동하여 Thymeleaf를 사용합니다. 레거시 시스템으로 인해 저는 Thymeleaf 2.1.5를 XML 구성과 함께 사용하고 있습니다.Thymeleaf : 다른 메시지에 대한 매개 변수로 메시지

내가 적절한 문서를 찾기 위해 고심하는 문제가 발생했습니다. 달성하고자하는 것은 다른 메시지의 매개 변수로 지역화 된 메시지를 사용하는 것입니다. 등록 정보 파일은 다음과 같다 어디에서 몇 가지 템플릿에있는

한 예는이

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

같은 것입니다 :

some.text=Some text string {0} 
click.here=CLICK HERE 
나는이 같은 일을 시도

:

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

하지만 행운을 얻지 못했습니다.

문자열을 지역화하고 자체 dom 요소의 일부가 아닌 방법이 있습니까? 예를 들어, 나는 다음과 같이 하나의 문자열을 배치 할 대신이의

String 

: 어떤 통찰력이 많이 주시면 감사하겠습니다

<div> String </div> 

합니다. 고맙습니다.

답변

1

이 특정 예를 들어 Thymeleaf 3 일 :

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

불행하게도, 출력 링크 주변 더블 따옴표를 생산하는 것은 작동하지 않습니다. Thymeleaf가 이것을 지원하는지 여부를 모릅니다. 나는 길을 찾으면 갱신 할 것이다. 작은 따옴표가 작동하는 것처럼 보입니다.

일반적으로 변수를 만들려면 th:with의 조합을 찾고있을 것입니다. 두 번째 질문까지라면 th:remove="tag"을 사용하여 태그를 제거 할 수 있습니다. 당신은 정말 국제화와 링크 텍스트 생성을 분할해야

@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

감사합니다. 나는 당신이 저를 거의 거기에 가졌다 고 믿지만이 오류가 발생합니다 : 요소 유형 "null"과 연관된 속성 "th : with"의 값은 '<'문자를 포함해서는 안됩니다. 이스케이프 처리되지 않은 텍스트를 사용하면서이 문제를 해결할 수있는 방법이 있습니까? –

+0

은 null을 제공하는 값 중 하나입니까? 나는'click을 볼 것이다.여기 ' – bphilipnyc

+0

click.here는 내가 말할 수있는 한 null이 아니다. 매개 변수없이 잘 사용할 수 있습니다. 아마도 '<'는 어떤 방식으로 도망 갈 필요가 있을지 모르지만 확실하지는 않습니다. –

0

:

답변과 같은 설정을 가정합니다. 스팬에 'some.text'를 래핑하고 그 후에 링크를 렌더링 할 수 있습니다. 이렇게하면 utext을 피하고 원하는 경우 번역 된 텍스트로 링크를 제대로 생성 할 수 있습니다.

결과 HTML에 스팬이 나타나지 않도록하는 한 가지 방법은 th:remove="tag" 속성을 사용하는 것입니다.

실수가 아닌 경우 <th:block>...</> 요소를 사용하여 다른 해결책을 사용할 수 있어야하므로 다시 태그를 제거 할 필요가 없습니다.

<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

불행히도, 나는 그것을 분할하는 것이 선택이라고 생각하지 않습니다. –

+0

왜 그럴 수 없습니까? 템플릿과 메시지 생성을 완전히 제어 할 수 없습니까? –

관련 문제