【问题标题】:spring-boot project don't evaluate thymeleaf custom processorsspring-boot 项目不评估 thymeleaf 自定义处理器
【发布时间】:2016-06-16 17:13:05
【问题描述】:

由于某种原因,我当前的 spring-boot 项目没有评估我的自定义 thymeleaf 标签。我在我的应用程序类中注册了这样的方言:

  @Bean
  public FormDialect formDialect() {
    return new FormDialect();
  }

方言以这种方式引用处理器:

public class FormDialect extends AbstractDialect {
  public String getPrefix() {
    return null;
  }

  public Set<IProcessor> getProcessors() {
    final Set<IProcessor> processors = new HashSet<IProcessor>();
    processors.add(new com.loja.thymeleaf.processor.form.FormProcessor());
    return processors;
  }
}

但是当我用这样的代码打开一个页面时:

      <Form ...>
        <Fieldset type="Input" class="form-group">
          <Label></Label>
          <Input class="form-control"></Input>
        </Fieldset>

        <Fieldset type="Select" class="form-group">
          <Label></Label>
          <Select class="form-control"></Select>
        </Fieldset>

        <Fieldset type="Textarea" class="form-group">
          <Label></Label>
          <Textarea class="form-control"></Textarea>
        </Fieldset>
      </Form>

处理器没有被评估为最终代码。任何人都可以看到这里有什么问题吗?这在这个项目中有效,但突然(经过一些更改,我不记得发生了什么)停止工作。

【问题讨论】:

    标签: spring spring-boot thymeleaf dialect


    【解决方案1】:

    比较我的工作代码,您可能缺少@Configuration 注释。

    @Configuration
    public class YourThymeleafConfig {
      @Bean
      public FormDialect formDialect() {
        return new FormDialect();
      }
    }
    

    你应该定义前缀

    public class FormDialect extends AbstractDialect {
      @Override
      public String getPrefix() {
        return "some_prefix";
      }
    
      @Override
      public Set<IProcessor> getProcessors() {
        final Set<IProcessor> processors = new HashSet<IProcessor>();
        processors.add(new com.loja.thymeleaf.processor.form.FormProcessor());
        return processors;
      }
    }
    

    模板

    <html xmlns:th="http://www.thymeleaf.org"
          xmlns:some_prefix="http://xxx">
      <!-- ... -->
      <Form some_prefix:your_diarect_attribute="...">
        <!-- ... -->
      </Form>
    </html>
    

    your_diarect_attribute对应org.thymeleaf.processor.AttributeNameProcessorMatcher#attributeName

    AttributeNameProcessorMatchercom.loja.thymeleaf.processor.form.FormProcessor 扩展

    【讨论】:

    • 方言声明已经有注解@SpringBootApplication,相当于用@Configuration@EnableAutoConfiguration@ComponentScan声明。并据此:github.com/thymeleaf/thymeleaf/issues/418 可以创建不带前缀的方言。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-27
    • 2021-08-27
    • 2017-03-08
    • 2018-05-07
    • 2021-07-10
    相关资源
    最近更新 更多