我已经创建了一个定制的Thymeleaf 3方言,如果我只使用静态属性值,它就可以正常工作,如下所示:
<formBuilder:inputRow title="Email:" name="email" value="test@test.com" />
但是,我想使用标准的Thymeleaf表达式来填充value属性,但是如果我这样写:
<formBuilder:inputRow title="Email:" name="email" value="${user.email}" />
输出将是文本${user.email},而不是实际的电子邮件地址。
如果我像这样使用th:value:
<formBuilder:inputRow title="Email:" name="email" th:value="${user.email}" />
然后根本不生成值字段。
方言类如下。它仅注册elementTag处理器:
public class FormBuilderDialect extends AbstractProcessorDialect {
private static final String DIALECT_NAME = "Form Builder Dialect";
public FormBuilderDialect() {
super(DIALECT_NAME, "formBuilder", StandardDialect.PROCESSOR_PRECEDENCE);
}
@Override
public Set<IProcessor> getProcessors(String dialectPrefix) {
final Set<IProcessor> processors = new HashSet<IProcessor>();
processors.add(new InputElementTagProcessor(dialectPrefix));
return processors;
}
}
元素处理器是:
public class InputElementTagProcessor extends AbstractElementTagProcessor {
private static final String TAG_NAME = "inputRow";
private static final int PRECEDENCE = 1000;
public InputElementTagProcessor(final String dialectPrefix) {
super(
TemplateMode.HTML, // This processor will apply only to HTML mode
dialectPrefix, // Prefix to be applied to name for matching
TAG_NAME, // Tag name: match specifically this tag
true, // Apply dialect prefix to tag name
null, // No attribute name: will match by tag name
false, // No prefix to be applied to attribute name
PRECEDENCE); // Precedence (inside dialect's own precedence)
}
@Override
protected void doProcess(ITemplateContext context, IProcessableElementTag tag, IElementTagStructureHandler structureHandler) {
final String name = tag.getAttributeValue("name");
final String value = tag.getAttributeValue("value");
final IModelFactory modelFactory = context.getModelFactory();
final IModel model = modelFactory.createModel();
// Add input
Map<String, String> inputAttributes = new HashMap<>();
inputAttributes.put("name", name);
inputAttributes.put("value", value);
model.add(modelFactory.createStandaloneElementTag("input", inputAttributes, AttributeValueQuotes.DOUBLE, false, false));
structureHandler.replaceWith(model, false);
}
}
你知道怎么解决这个问题吗?
有同样的问题,有一个更简单的方法。
为了解决这个问题,我必须创建一个属性标记处理器,如下所示:
public class FormBuilderAttributeTagProcessor extends AbstractAttributeTagProcessor {
private static final String ATTR_NAME = "value";
private static final int PRECEDENCE = 100;
public FormBuilderAttributeTagProcessor(final String dialectPrefix) {
super(
TemplateMode.HTML,
dialectPrefix,
"inputRow",
true,
ATTR_NAME,
false,
PRECEDENCE,
false);
}
@Override
protected void doProcess(ITemplateContext context, IProcessableElementTag tag, AttributeName attributeName, String attributeValue, IElementTagStructureHandler structureHandler) {
final IEngineConfiguration configuration = context.getConfiguration();
final IStandardExpressionParser parser = StandardExpressions.getExpressionParser(configuration);
final IStandardExpression expression = parser.parseExpression(context, attributeValue);
final String result = (String) expression.execute(context);
structureHandler.setAttribute("value", result);
}
}
并将其注册为方言类中的处理器:
public class FormBuilderDialect extends AbstractProcessorDialect {
private static final String DIALECT_NAME = "Form Builder Dialect";
public FormBuilderDialect() {
super(DIALECT_NAME, "formBuilder", StandardDialect.PROCESSOR_PRECEDENCE);
}
@Override
public Set<IProcessor> getProcessors(String dialectPrefix) {
final Set<IProcessor> processors = new HashSet<IProcessor>();
processors.add(new InputElementTagProcessor(dialectPrefix));
processors.add(new FormBuilderAttributeTagProcessor(dialectPrefix));
return processors;
}
}
我想在胸腺方言中使用胸腺方言,但不能。我尝试过这个,但效果不佳: of删除里面的所有内容。我想在渲染后得到这样的东西: 那么,我该如何实现我的目标呢?
我正在遍历一个列表,并为每个设置一个属性,如下所示 其中,是一个权限字符串。 即使用户有权限,div也不会渲染。我尝试过这样使用th: attr: 仍然不起作用。我认为shiro:hasPermission=“${element.permission}”的用法不正确。我该如何解决这个问题? 我使用的是Spring MVC Thymeleaf Thymeleaf Shiro方言。
大家好,我对thymeleaf和我的静态html页面有一个问题。更具体地说,我有一个spring mvc web应用程序,我也在使用spring security,在我的登录页面中,我想使用thymeleaf,这样spring security可以与另一端的客户端层通信吗?我不想在我的所有html页面中包括thymeleaf,因为我将使用AngularJs 我尝试将登录名放在templates文件
我是百里香的初学者。我从一个常见的布局页面开始: 碎片/布局。html 和一个内容页面: 页html 当我渲染页面时,标题总是来自模板,而不是页面。在Thymeleaf中,是否有可能具有共同的元、脚本和样式(在HEAD标签中),但具有每页标题?
使用SpringMVC+Thymeleaf,如何将基于整数的模型属性绑定到使用th:value或th:field的表单中的输入字段,而字段本身不显示值“0”。
我使用Spring的引导2.6.3和我试图使用thymeleaf最近得到一个与html的确认消息后,我通过邮件确认我的帐户(我只是使用确认邮件来验证新帐户),所以我看了一些关于thymeleaf的视频,我标记所有的视频都有一个名为模板的文件夹和静态在src/main/ressource和我没有他们,所以我创建了一个名为模板的文件夹,在文件夹中我创建了一个html文件只是为了尝试它,如果它(html