Ofbiz: 自定義表單校驗

用了一段時間ofbiz自帶的form widgets工具,發現不是很好用。尤爲是與前端配合開發的時候,表單的樣式、效果受到了不少的限制。因而決定拋棄form widget,用freemarker。前端開發出來的效果和效率果真有了很大提交。可是存在一個問題,就是用freemarker寫的表單提交如何作校驗?和Struts不同,struts框架中自帶了form的驗證器。那麼ofbiz除了form widget之外,有沒有辦法實現表單驗證呢? 前端

答案就在ofbiz的service中。 java

由於ofbiz的邏輯層是一個一個的services,在給service的定義時,必需要給出傳入參數和返回結果(參考services.xml)。以下service中定義了一個createProduct的服務。須要傳入productId等參數。 框架

 

   
   
   
   
  1. <service name="createProduct" engine="java" 
  2.     location="com.openb2c.product.common.ProductServices" 
  3.     invoke="createProduct"> 
  4.     <attribute name="productId" type="String" mode="IN" 
  5.         optional="false"></attribute> 
  6.     ...... 
  7. </service> 

這裏能夠給每個attribute內加上這樣一個標籤:ide

 

   
   
   
   
  1. <attribute name="productId" type="String" mode="IN" optional="false"> 
  2.  
  3.             <type-validate class="org.ofbiz.base.util.UtilValidate " 
  4.                 method="isNotEmpty "> 
  5.                 <fail-message message="productId不能爲空" /> 
  6.             </type-validate> 
  7. </attribute> 

這個<type-validate>標籤將會對attribute: productId進行校驗。工具

校驗的方法如上所見,裝載class"org.ofbiz.base.util.UtilValidate ",這個class是ofbiz自帶的一個驗證工具,固然也能夠寫你本身適用的驗證工具 。並調用class中的方法method"isNotEmpty"。這裏運用了java的反射技術。fail-message是當驗證不經過時,返回給服務調用者的錯誤信息。 spa

    service會把全部的參數都驗證一遍,如有多個參數不經過的話,會把全部的不經過信息都返回。 orm

    至此,只要咱們提交表單時,把request指向一個service。(在controller.xml中定義request-map,request-map中定義<event type="service" invoke="createProduct"/>)。當service校驗不經過時,就會把錯誤並錯誤信息一塊兒返回。只要在request-map的response中定義service失敗的頁面跳轉,便可把信息返回給用戶。 xml

    另外,我使用的ofbiz版本(opentaps 1.0使用的)對一個參數只支持一個validator,要支持一個屬性多個validators的驗證,只需簡單的在ModelServiceReader(解釋services.xml的工具)的方法addValidators方法中稍做修改便可。 blog

    到此,ofbiz表單部分比較知足咱們OpenB2C項目的開發需求。前端UI用freemarker較快作出好的頁面,而且能對錶單作驗證。開發

相關文章
相關標籤/搜索