0

出于某种原因,我当前的 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>

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

4

1 回答 1

2

比较我的工作代码,您可能会缺少@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

于 2016-06-21T01:31:41.580 回答