programing

티멜리프:연결 - 식으로 구문 분석할 수 없습니다.

goodsources 2022. 12. 29. 20:35
반응형

티멜리프:연결 - 식으로 구문 분석할 수 없습니다.

템플릿에서 여러 값을 조합하려고 할 때 문제가 발생합니다.여기 Thymelaf에 따르면, 나는 단순히 그것들을 함께 할 수 있을 것이다.

4.6 TEX 연결TS

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

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>

Template Engine 및 Template Resolver를 설정하는 방법은 다음과 같습니다.

<!-- 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>

Tymeleaf Templating 서비스:

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

Abstract Template.자바:

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;
  }
}

하지만 내가 보기엔 구문에서 꽤 간단한 오류가 있는 것 같아

<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개월이 지난 지금은 이것이 다소 쓸모없을지라도.

당신은 당신의 단순/복잡한 표현을 둘러싸는 것으로 많은 종류의 표현을 구성할 수 있다.||문자:

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

| char를 사용하면 IDE로 경고를 받을 수 있습니다.예를 들어 인텔리J의 마지막 버전에서 경고를 받을 수 있습니다.따라서 가장 좋은 해결책은 다음 구문을 사용하는 것입니다.

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

다음과 같이 나타낼 수 있습니다.


<h5 th:text ="${currentItem.first_name}+ ' ' + ${currentItem.last_name}"></h5>

언급URL : https://stackoverflow.com/questions/16119421/thymeleaf-concatenation-could-not-parse-as-expression

반응형