Thymeleaf : Concatenation-식으로 구문 분석 할 수 없습니다.


83

내 템플릿에서 여러 값을 연결하려고 할 때 문제가 있습니다. 여기의 Thymeleaf에 따르면 나는 단순히 + 그들을 함께 할 수 있어야합니다 ...

4.6 연결 텍스트

텍스트가 리터럴이든 변수 또는 메시지 표현식 평가의 결과이든 상관없이 + 연산자를 사용하여 쉽게 연결할 수 있습니다.

th:text="'The name of the user is ' + ${user.name}"

내가 찾은 작품의 예는 다음과 같습니다.

<p th:text="${bean.field} + '!'">Static content</p>

그러나 이것은 그렇지 않습니다.

<p th:text="${bean.field} + '!' + ${bean.field}">Static content</p>

논리적으로 이것은 작동하지만 그렇지 않습니다. 내가 뭘 잘못하고 있습니까?


메이븐 :

<dependency>
    <groupId>org.thymeleaf</groupId>
    <artifactId>thymeleaf-spring3</artifactId>
    <version>2.0.16</version>
    <scope>compile</scope>
</dependency>

내 TemplateEngine 및 TemplateResolver를 설정하는 방법은 다음과 같습니다.

<!-- Spring config -->
<bean id="templateResolver" class="org.thymeleaf.templateresolver.ClassLoaderTemplateResolver">
    <property name="suffix" value=".html"/>
    <property name="templateMode" value="HTML5"/>
    <property name="characterEncoding" value="UTF-8"/>
    <property name="order" value="1"/>
</bean>
<bean id="templateEngine" class="org.thymeleaf.spring3.SpringTemplateEngine">
    <property name="templateResolver" ref="fileTemplateResolver"/>
    <property name="templateResolvers">
        <list>
            <ref bean="templateResolver"/>
        </list>
    </property>

ThymeleafTemplatingService :

@Autowired private TemplateEngine templateEngine;
.....
String responseText = this.templateEngine.process(templateBean.getTemplateName(), templateBean.getContext());

AbstractTemplate.java :

public abstract class AbstractTemplate {
  private final String templateName;
  public AbstractTemplate(String templateName){
    this.templateName=templateName;
  }
  public String getTemplateName() {
    return templateName;
  }
  protected abstract HashMap<String, ?> getVariables();
  public Context getContext(){
    Context context = new Context();
    for(Entry<String, ?> entry : getVariables().entrySet()){
      context.setVariable(entry.getKey(), entry.getValue());
    }
    return context;
  }
}

같은 오류가 발생했습니다 !!!!!!!!!! 하지만 난 thymeleaf 및 스칼라 사용

내가 작동하도록 관리 한 유일한 방법은 전처리를 사용하는 것입니다. <p th:text="${'__${bean.property1}__' + '::' + '__${bean.property2}__'}">default text</p>
NeilA 2013

이 예제는 저에게 효과적입니다. 어떤 버전의 thymeleaf를 사용하고 있습니까? 추가 방언을 사용하고 있습니까?
hubbardr 2013

답변:


202

그러나 내가 본 것에서 당신은 구문에 아주 간단한 오류가 있습니다.

<p th:text="${bean.field} + '!' + ${bean.field}">Static content</p>

올바른 구문은 다음과 같습니다.

<p th:text="${bean.field + '!' + bean.field}">Static content</p>

사실 구문 th:text="'static part' + ${bean.field}"th:text="${'static part' + bean.field}".

시도해보십시오. 6 개월이 지나면 지금은 쓸모 없겠지만.


감사합니다. 도움이되었습니다.
asifaftab87

23
6 개월이 지나면 쓸모
없나요

32

||문자 사이의 단순 / 복잡한 표현을 둘러 싸서 다양한 종류의 표현을 연결할 수 있습니다 .

<p th:text="|${bean.field} ! ${bean.field}|">Static content</p>

나는 Thymeleaf 버전을 사용하고 있습니다 : 2.1.1.RELEASE은 (는 마지막 버전을해야한다)
페르난도 Aspiazu에게

버전에 좋은 작품2.1.5
티아고 페레이라

1
텍스트에 |? 예를 들면. "|${fullName} Stories \| Twiza|"식으로 구문 분석 할 수 없습니다.
Piyush

당신이 구문 ... 당신에게 그것을하지 작업을 변환 할 수 있습니다 않았다 여기 수행하는 방법 th:class="'hotel listing col organic urgencyMsg available organic h-' + ${record.hotelInfo.hotelId} + '-organic'"> 오전 사용3.0.2
샤리프

1
텍스트에서 수직 막대 (|) 사용 :<p>[[${fullName}]] Stories | Twiza </p>
ranjan

4

와 함께 | char, IDE에서 경고를받을 수 있습니다. 예를 들어 IntelliJ의 마지막 버전에서 경고가 표시되므로 다음 구문을 사용하는 것이 가장 좋습니다.

th:text="${'static_content - ' + you_variable}"

1

다음과 같이 연결할 수 있습니다.


<h5 th:text ="${currentItem.first_name}+ ' ' + ${currentItem.last_name}"></h5>
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.