我想知道如何在使用Thymeleaf将输入值发送到控制器之前修剪输入值?
我使用Spring MVC和Thymeleaf作为模板引擎。
下面是我表格的代码:
<form id="collabForm" method="post" action="#" th:action="@{/collaborateurs/add}" role="form" th:object="${newCollaborateur}">
<div class="box-body">
<div class="form-group col-sm-6 col-md-4 col-lg-4">
<label for="nomCollab">Nom</label>
<input id="nomCollab" class="form-control" name="nom" type="text" placeholder="Saisir le nom" th:field="*{nom}" required="required"/>
</div>
</div>
</form>
谢谢!
您可以使用Spring StringTrimmerEditor:
public abstract class BaseController // your super controller class
@InitBinder
public void initBinder(final WebDataBinder binder) {
final StringTrimmerEditor stringtrimmer =
new StringTrimmerEditor(true);
binder.registerCustomEditor(String.class, stringtrimmer);
}
}
我的解决方案
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.DeserializationContext;
import com.fasterxml.jackson.databind.SerializerProvider;
import com.fasterxml.jackson.databind.deser.std.StdDeserializer;
import com.fasterxml.jackson.databind.module.SimpleModule;
import com.fasterxml.jackson.databind.ser.std.StdSerializer;
import org.springframework.lang.Nullable;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.WebDataBinder;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.InitBinder;
import java.beans.PropertyEditorSupport;
import java.io.IOException;
@ControllerAdvice
public class StringTrimModule extends PropertyEditorSupport {
@Component
public class JsonStringTrimModule extends SimpleModule {
public JsonStringTrimModule() {
addDeserializer(String.class, new StdDeserializer<String>(String.class) {
@Override
public String deserialize(JsonParser jsonParser, DeserializationContext context) throws IOException, JsonProcessingException {
switch (jsonParser.getCurrentName()) {
case "password":
return _parseString(jsonParser, context);
default:
return trim(_parseString(jsonParser, context));
}
}
});
addSerializer(String.class, new StdSerializer<String>(String.class) {
@Override
public void serialize(String value, JsonGenerator gen, SerializerProvider provider) throws IOException {
gen.writeString(trim(value));
}
});
}
}
@InitBinder
public void initBinder(WebDataBinder binder) {
binder.setDisallowedFields("*password");
binder.registerCustomEditor(String.class, this);
}
@Override
public void setAsText(@Nullable String text) {
if (text == null) {
setValue(null);
} else {
String value = trim(text);
if ("".equals(value)) {
setValue(null);
} else {
setValue(value);
}
}
}
private String trim(String value) {
return value.trim().replaceAll("( )+", " ");
}
}
我试着从一个实体类中验证两个字段,它有两个字段:name和price,但字符串和我都试着从每个@notblank打印消息(消息=“...”)输入字段下的表单。但我有以下错误: 对象“food DTO”中字段“name”上的字段错误:拒绝值[];代码[notblank.fooddto.name,notblank.name,notblank.java.lang.String,notblank];参数[
我怎么能访问变量我添加到模型中的Spring MVC内胸腺模板?我有以下控制器代码: 如何访问thymeleaf模板中的变量var1、var5、var6等?
如何验证输入,以便当输入为空时弹出消息
我需要向我的实体添加日期,并让用户在web表单中设置它。默认情况下,该字段需要填写今天的日期。 显示为默认值设置的正确日期 显示没有任何值的日期选择器(注意:String startDate=“2016-08-01”;) 生成 400 错误(错误请求)(注意:开始日期 = 新日期 ();) 那么,问题是:如何使用胸膜输入日期? 我可以使用Date()数据类型输入和存储这些数据吗 我需要如何在表单中
本文向大家介绍SpringMVC中使用Thymeleaf模板引擎实例代码,包括了SpringMVC中使用Thymeleaf模板引擎实例代码的使用技巧和注意事项,需要的朋友参考一下 本文研究的主要是SpringMVC中使用Thymeleaf模板引擎的相关内容,具体介绍如下。 Thymeleaf提供了一组Spring集成,允许您将其用作Spring MVC应用程序中全面替代JSP的功能。 Maven依
我试图测试我的Spring MVC控制器,但我不断收到与Thymeleaf模板相关的错误。我真的不想在控制器测试中处理模板错误,因为这不是我真正感兴趣的。当模板不存在时让测试失败是可以的,但现在我收到了与根据错误代码找不到消息相关的错误。 当我运行应用程序时,这个问题不存在。我一直在尝试弄清楚如何设置测试环境来解决这个问题,但在那里我找不到任何有效的方法。现在,我只是真的想让控制器代码正常工作。