gpt4 book ai didi

Spring MVC 验证自定义消息

转载 作者:行者123 更新时间:2023-12-01 08:21:19 25 4
gpt4 key购买 nike

我的问题是我有一个表单,其中包含带有一些选择选项值的 html 选择元素,我想使用以下方法验证这些值:

org.hibernate.validator.constraints
or
javax.validation.constraints

注释。在这里你可以看到我的表单和我的选择元素:

<form:form action="../agents/add" method="POST" commandName="myAgent">
<form:select path="state">
<form:option value="ACTIVE" path="state">ACTIVE</form:option>
<form:option value="LISTEN" path="state">LISTEN</form:option>
<form:option value="DOWN" path="state">DOWN</form:option>
</form:select>
</form:form>

我已经这样定义了我的 Controller 方法:

    @RequestMapping(value = "agents/add", method = RequestMethod.POST)
public String addAgentSubmit(@ModelAttribute("myAgent") @Valid final AgentValidator agent, BindingResult result, RedirectAttributes redirect) {
if (result.hasErrors()) {
return "admin/agent/add";
}
...
}

我还像这样定义了一个 ModelAttribute:

@ModelAttribute("myAgent")
public AgentValidator getLoginForm() {
return new AgentValidator();
}

这也是我的 AgentValidator 类:

public class AgentValidator {
@NotEmpty(message = "your state can not be empty !")
private AgentState state;
getter & setter ...
}

这是我的代理状态:

public enum AgentState {
ACTIVE, DOWN, PAUSED
}

当我在表单中输入错误的值时(类似这样):

<form:form action="../agents/add" method="POST" commandName="myAgent">
<form:select path="state">
<form:option value="ACTIVE!NVALID" path="state">ACTIVE</form:option>
<form:option value="LISTEN" path="state">LISTEN</form:option>
<form:option value="DOWN" path="state">DOWN</form:option>
</form:select>
</form:form>

在我提交表单后,我的 JSP 中没有显示自定义消息,相反我会看到这条消息:

Failed to convert property value of type java.lang.String to required type tm.sys.validator.AgentState for property state; nested exception is org.springframework.core.convert.ConversionFailedException: Failed to convert from type java.lang.String to type @javax.validation.constraints.NotNull tm.sys.validator.AgentState for value ACTIVE!NVALID; nested exception is java.lang.IllegalArgumentException: No enum constant tm.sys.validator.AgentState.ACTIVE!NVALID

我为这个问题进行了很多搜索,但没有一个解决方案可以帮助我向用户提供显示的自定义消息。如果您对此有任何解决方案,请提供完整的解决方案,因为我还不是高级程序员。

最佳答案

您需要将以下键之一添加:typeMismatch、typeMismatch.state 或 typeMismatch.agentValidator.state 到您的 Messages.properties(或 ValidationMessages.properties - 您已使用验证器配置的任何消息属性文件)。

typeMismatch.state=You provided invalid state

可以从 BindingResult 中找到您需要添加到消息属性的确切键名。查看 result.getFieldError().getCodes()(如果有的话,这应该包含第一个字段错误的代码)。

当表单提交的值无法转换为所需类型(在您的情况下为枚举)时,这将覆盖默认消息(您看到的消息)。

关于Spring MVC 验证自定义消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15718771/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com