Spring roo,apache tiles显示在控制器中设置的模型属性

时间:2013-03-14 10:35:45

标签: 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, 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);
}

现在我的问题是如何在创建页面中显示错误(如果不是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>

提前致谢

3 个答案:

答案 0 :(得分:2)

Spring roo使用spring标记形式:错误将打印与该字段关联的任何错误消息。

所以你需要做的就是生成错误信息是一种弹出形式的方式:错误标记。

有许多方法可以进行验证,最简单的方法是在控制器本身中进行验证。

所以你的代码会改为:

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中定义

答案 1 :(得分:1)

您可以使用以下代码段获取错误字符串,然后使用警报机制显示错误消息:

    <c:if test="${not empty error}">
           <c:out value="${error}"/>
    </c:if>

答案 2 :(得分:0)

有几种方法可以解决这个问题,但我相信我会在你的实体的供应商属性上放置一个@UNIQUE验证器。我相信您可以通过发出另一个jpa命令来添加约束,该命令与最初用于创建供应商字段但添加了--unique选项的命令相同。

http://static.springsource.org/spring-roo/reference/html/command-index.html#command-index-field-commands