SpringRoo,ApacheTiles显示在控制器中设置的模型属性
我使用的是Spring roo,在其中一个控制器中,我使用字符串设置模型属性“error”,如下所示:SpringRoo,ApacheTiles显示在控制器中设置的模型属性,spring,spring-roo,apache-tiles,Spring,Spring Roo,Apache Tiles,我使用的是Spring roo,在其中一个控制器中,我使用字符串设置模型属性“error”,如下所示: //uiModel.addAttribute("error", "Duplicate name for Vendor"); @RequestMapping(method = RequestMethod.POST) public String create(@Valid Vendor vendor, BindingResult bindingResult, Model uiModel, Htt
//uiModel.addAttribute("error", "Duplicate name for Vendor");
@RequestMapping(method = RequestMethod.POST)
public String create(@Valid Vendor vendor, BindingResult bindingResult, Model uiModel, HttpServletRequest httpServletRequest) {
if (bindingResult.hasErrors()) {
uiModel.addAttribute("vendor", vendor);
addDateTimeFormatPatterns(uiModel);
return "vendors/create";
}
try {
vendorService.saveVendor(vendor);
uiModel.asMap().clear();
} catch(Exception e) {
uiModel.addAttribute("vendor", vendor);
uiModel.addAttribute("error", "Duplicate name for Vendor");
addDateTimeFormatPatterns(uiModel);
return "vendors/create";
}
return "redirect:/vendors/" + encodeUrlPathSegment(vendor.getId().toString(), httpServletRequest);
}
现在我的问题是如何在create页面中显示错误(如果不是null),现在如下所示
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<div xmlns:c="http://java.sun.com/jsp/jstl/core" xmlns:field="urn:jsptagdir:/WEB-INF/tags/form/fields" xmlns:form="urn:jsptagdir:/WEB-INF/tags/form" xmlns:jsp="http://java.sun.com/JSP/Page" xmlns:spring="http://www.springframework.org/tags" version="2.0">
<jsp:directive.page contentType="text/html;charset=UTF-8"/>
<jsp:output omit-xml-declaration="yes"/>
<form:create id="fc_domain_Vendor" modelAttribute="vendor" path="/vendors" render="${empty dependencies}" z="MGZPL+gO+CDX6M4iRO/z/qRfnJI=">
<field:input field="name" id="c_domain_Vendor_name" required="true" z="s+3hs8xXpSZ71RoD0ktXy0BnjS0="/>
<field:input field="email" id="c_domain_Vendor_email" validationMessageCode="field_invalid_email" z="+4rIdPGArWhHQlrFG/1N6yrKKno="/>
<field:input field="mobile" id="c_domain_Vendor_mobile" max="16" z="kgM5Z9jJ6xW9BxiPPB4Ipz0TUKg="/>
</form:create>
<form:dependency dependencies="${dependencies}" id="d_domain_Vendor" render="${not empty dependencies}" z="hLv7c7K8OOSRrBJKgKuw9H1+GvA="/>
</div>
提前感谢有几种方法可以实现这一点,但我相信我会在您实体的供应商属性上添加一个@UNIQUE validator。我相信您可以通过发出另一个jpa命令来添加约束,该命令与最初用于创建供应商字段的命令相同,但添加了--unique选项
您可以使用以下代码段获取错误字符串,然后使用警报机制显示错误消息:
<c:if test="${not empty error}">
<c:out value="${error}"/>
</c:if>
Spring roo使用Spring标记表单:errors,它将打印与该字段相关的任何错误消息 因此,您所需要做的就是生成错误消息,它将被spring表单:errors标记获取 有很多方法可以进行验证,最简单的方法是从控制器本身开始 因此,您的代码将更改为:
try {
vendorService.saveVendor(vendor);
uiModel.asMap().clear();
} catch(Exception e) {
uiModel.addAttribute("vendor", vendor);
bindingResult.rejectValue("name", "vendor.name.duplicate");
addDateTimeFormatPatterns(uiModel);
return "vendors/create";
}
注意:vendor.name.duplicate是一个messages属性,您必须在WEB-INF/i18n/messages.properties中定义它感谢您的响应。是的,我本可以添加验证器,但这里我想了解如何将属性或值发送到视图(ApacheTile),这只是一个用例。谢谢。你可以在返回字符串的对象上放置一个getter,然后像调用页面中的属性一样调用它。请你解释一下(如果可能的话,用代码),谢谢。谢谢你的回复。你能告诉我怎么做吗?“需要做的是生成错误消息,它将被spring表单:errors标签获取。”我曾想过用这个答案分割赏金,但后来我意识到没有这样的选项。。。我很抱歉。这两个答案对我都有帮助。