gpt4 book ai didi

java - Spring的验证

转载 作者:行者123 更新时间:2023-12-02 07:45:27 24 4
gpt4 key购买 nike

我想在 spring 端进行验证.. Spring 进行验证,但是当我尝试在表单上传递错误时,我收到错误:

java.lang.IllegalStateException: Neither BindingResult nor plain target object for bean name 'newProductType' available as request attribute
org.springframework.web.servlet.support.BindStatus.<init>(BindStatus.java:141)
org.springframework.web.servlet.tags.form.AbstractDataBoundFormElementTag.getBindStatus(AbstractDataBoundFormElementTag.java:178)
org.springframework.web.servlet.tags.form.AbstractDataBoundFormElementTag.getPropertyPath(AbstractDataBoundFormElementTag.java:198)
org.springframework.web.servlet.tags.form.AbstractDataBoundFormElementTag.getName(AbstractDataBoundFormElementTag.java:164)
org.springframework.web.servlet.tags.form.AbstractDataBoundFormElementTag.autogenerateId(AbstractDataBoundFormElementTag.java:151)
org.springframework.web.servlet.tags.form.AbstractDataBoundFormElementTag.resolveId(AbstractDataBoundFormElementTag.java:142)
org.springframework.web.servlet.tags.form.AbstractDataBoundFormElementTag.writeDefaultAttributes(AbstractDataBoundFormElementTag.java:126)
org.springframework.web.servlet.tags.form.AbstractHtmlElementTag.writeDefaultAttributes(AbstractHtmlElementTag.java:421)
org.springframework.web.servlet.tags.form.InputTag.writeTagContent(InputTag.java:142)
org.springframework.web.servlet.tags.form.AbstractFormTag.doStartTagInternal(AbstractFormTag.java:102)
org.springframework.web.servlet.tags.RequestContextAwareTag.doStartTag(RequestContextAwareTag.java:79)
org.apache.jsp.jsp.admin_jsp._jspx_meth_form_005finput_005f0(admin_jsp.java:532)
org.apache.jsp.jsp.admin_jsp._jspService(admin_jsp.java:143)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:393)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:320)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
org.springframework.web.servlet.view.InternalResourceView.renderMergedOutputModel(InternalResourceView.java:238)
org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:262)
org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1157)
org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:927)
org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:827)
org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:882)
org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:789)
javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88)
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)

这是我的代码:

validator :公共(public)类 MetalTypeValidator 实现 validator {

@Override
public boolean supports(Class<?> clazz) {
return MetalTypeEntity.class.isAssignableFrom(clazz);
}

@Override
public void validate(Object target, Errors errors) {
ValidationUtils.rejectIfEmptyOrWhitespace(errors, "value", "value.required");
}

}

在 spring 的 xml 中声明 validator :

<bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean" />
<bean id="metalTypeValidator" class="com.javanix.xmetal.web.validator.MetalTypeValidator" />

Controller :

@Controller
@RequestMapping("/admin")
public class AdminController implements IConstants {
@Autowired
private MetalTypeValidator metalTypeValidator;

@Autowired
private MetalTypeServiceImpl metalTypeService;

@RequestMapping
public String getMainPageData(Map<String, Object> map) {
map.put("newProductType", new MetalTypeEntity());
map.put("productTypeList", metalTypeService.getList());
return "admin";
}

@RequestMapping(value = "/add/product_type", method = RequestMethod.POST)
public String addProductType(
@Valid @ModelAttribute("newType") MetalTypeEntity entity,
BindingResult result, SessionStatus status) {

metalTypeValidator.validate(entity, result);
if (result.hasErrors()) {
// result.getModel().put("newProductType", new MetalTypeEntity());
return "/admin";
}
metalTypeService.add(entity);
return "redirect:/admin";
}

}

tiles.xml:

<definition name="admin" extends=".mainTemplate" >
<put-attribute name="title" value="Admin page" type="string" />
<put-attribute name="content" value="/jsp/admin.jsp" />
<!-- here some other stuff -->
</definition>

admin.jsp(使用我的实体的 block ):

<div id="MetalType">
<table class="data">
<tr>
<th><spring:message code="label.header.metal.name"/> **</th>
<th>&nbsp;</th>
</tr>
<c:forEach items="${productTypeList}" var="productType">
<tr>
<td>${productType.value}</td>
<td><a href = "<c:url value="admin/delete/product_type/${productType.id}" />" > <spring:message code="label.button.delete"/> </a> </td>
</tr>
</c:forEach>

<form:form method="post" action="admin/add/product_type" commandName="newProductType">
<tr>
<td><form:input path="value"/></td>
<td><input type="submit" value="<spring:message code="label.type.add"/>"/></td>
</tr>
<tr>
<td><form:errors path="value" cssClass="errors"/></td>
<td>&nbsp;</td>
</tr>
</form:form>

</table>
</div>

最佳答案

将类似的内容添加到您的 Controller 类中:

@ModelAttribute("newProductType")
public MetalTypeEntity createMetalTypeEntity() {
return new MetalTypeEntity();
}

关于java - Spring的验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10948414/

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