<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 431,  comments - 344,  trackbacks - 0

    在Spring MVC體系里,已經(jīng)提供了bind(request,command)函數(shù)進行Bind and Validate工作。
      但因為默認的bind()函數(shù)是拋出Servlet異常,而不是返回以數(shù)組形式保存錯誤信息的BindingResult對象供Controller處理 所以BaseController另外實現(xiàn)了一個bindObject函數(shù):

    BindException  bindObject(ServletRequest request, Object command)
    1.Bind And Validate的完整使用代碼:
         public BindingResult bindBook(HttpServletRequest request, Book book) throws Exception
        {
     Integer category_id = new Integer(request.getParameter("category.id"));
            book.setCategory(bookManager.getCategory(category_id));
            binder.setDisallowedFields(new String[]{"category"});
    addValidator(new BookValiator());
            return bindObject(request, book);
    }
      其中第1-3句是綁定不能自動綁定的Category對象,(另外一個方案是實現(xiàn)Category的PropertityEditor,并注冊,不過這太不實際了)并命令binder忽略這些已被手工綁定的field.
           注意,如果不忽略,binder綁定時則很有可能出錯。

      第4句增加validator。

      第5句執(zhí)行Bind and Validate。

    不過,我們一般會重載preBind()函數(shù)來完成1-3句的操作。逐一
         而且springmodules+ common-validator已經(jīng)提供了默認的幾種Validator和在XML節(jié)點配置默認注入的框架,只有自己寫了特別的validator,并且不希望使用common-validator框架來定義時才像第四步那樣使用BaseController的addValidator函數(shù)加入新的validator。

    2.Binder
         一般由ServletRequestDataBinder完成Bind的工作。與其他框架自動綁定FormBean不同,Spring里需要手工調(diào)用Binder.

         但因為日期格式不固定, Binder并沒有預先包含Date的Propertity Editor。 另外數(shù)字類的Editor默認不允許字符串為空,這些都需要初始化設置。

         在Multi-action體系中,有initBinder()的callBack函數(shù):

            SimpleDateFormat dateFormat = new SimpleDateFormat(DateUtil.getDatePattern());
            binder.registerCustomEditor(Date.class, new CustomDateEditor(dateFormat, true));
            binder.registerCustomEditor(Integer.class, new CustomNumberEditor(Integer.class, true));
            binder.registerCustomEditor(Double.class, new CustomNumberEditor(Double.class, true));
       createBinder的另一個callBack函數(shù)是getCommandName(),getCommandName將用于在頁面用<spring:bind>綁定錯誤信息時的標識,baseController默認定為首字母小寫的類名。

     

    3.Validator
         Validator的客戶端和服務器端方案用common validator和spring moudles里的集成 。

     

    4.Bind and Validate出錯處理
        Bind and Validate出錯,一般會重新跳回輸入頁面,在頁頭以如下代碼顯示錯誤信息,并重新綁定所有數(shù)據(jù):

    <%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>


    <c:iftest="${book!=null}">
        <spring:bind path="book.*">
            <c:if test="${not empty status.errorMessages}"><  BR>            <div class="error">
                    <c:forEach var="error" items="${status.errorMessages}">
                        ${error}<br/>
                    </c:forEach>
                </div>
            </c:if>
        </spring:bind>
    </c:if>

     

    posted on 2009-01-09 23:05 周銳 閱讀(442) 評論(0)  編輯  收藏 所屬分類: Spring
    主站蜘蛛池模板: 四虎影视精品永久免费| 国产在线观看免费视频播放器| 黄色免费在线网站| 亚欧乱色国产精品免费视频| a一级毛片免费高清在线| 免费一级毛片在播放视频| 久久精品蜜芽亚洲国产AV| 自拍日韩亚洲一区在线| 福利片免费一区二区三区| 日韩精品无码免费专区午夜| 色婷婷7777免费视频在线观看| 99热这里有免费国产精品| 女人18毛片水真多免费看| 亚洲片一区二区三区| 久久久久亚洲精品无码系列| 亚洲youwu永久无码精品| 一个人免费视频在线观看www| 亚洲愉拍99热成人精品热久久| 亚洲校园春色另类激情| 女人18特级一级毛片免费视频| 羞羞网站免费观看| 成年美女黄网站18禁免费| 91亚洲国产成人久久精品网站| 在线91精品亚洲网站精品成人| 亚洲AV无码之日韩精品| 亚洲av无码一区二区三区天堂古代| 三根一起会坏掉的好痛免费三级全黄的视频在线观看 | 亚洲人成片在线观看| 可以免费观看的毛片| 亚洲成人高清在线观看| 久久精品国产免费一区| 亚洲乱码中文字幕小综合| 国产精品色午夜视频免费看| 亚洲一级片免费看| 亚洲无成人网77777| 亚洲?v无码国产在丝袜线观看| 亚洲人片在线观看天堂无码| 1000部拍拍拍18勿入免费视频软件| 亚洲日韩精品一区二区三区无码| 亚洲免费闲人蜜桃| 九九免费精品视频在这里|