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

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

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

    常言笑的家

    Spring, Hibernate, Struts, Ajax, RoR

    Ofbiz學習經驗談

    不可否認,OFBiz這個開源的系統功能是非常強大的,涉及到的東西太多了,其實對我們現在而言,最有用的只有這么幾個:實體引擎、服務引擎、WebTools、用戶權限管理。

    最先要提醒各位的是,在配置一個OFBiz時,路徑中千萬不要包含空格,要不然老提示出錯,無外乎是scoket write error之類的信息,會讓你郁悶得不停^_^

    用戶登錄鑒權這一塊我們完全可以照搬OFBiz現有的東西,其實也就是調用包org.ofbiz.securityext.login.LoginEvents里面的一些方法來進行處理。

    Component定義:component-load.xml,可根據需要調整需在啟動時引入的Component,比如增加一個Study,定義:

    <load-component component-location="${ofbiz.home}/components/study"/>



    首先需要進行如下幾個項目的總體配置:

    1、 entityengine.xml:實體引擎配置,主要是配置該數據的方式,如通過oracle訪問,就配置一下localoracle,特別需要注意的是,在dataSource中配置中,一定要配置一個屬性 - schema-name="OFBIZ",這個主要是為了在OFBiz啟動時能夠正常同數據庫的對象進行匹配,如果沒有進行配置,每次都會試圖重新建立對象,會報對象名已經被占用的情況。

    2、 serviceengine.xml:服務引擎配置,這個基本上不用作太大的修改,如要必要,可在這里邊進行一些參數的調優,比如訪問線程數配置等。

    之后需要在components目錄下新建一個目錄study,目錄里面的一些文件可直接從模板中拷貝,之后再進行必要的修改,涉及修改內容:
    1、 entitygroup.xml & entitymodel 實體定義(3.0版本開始,各實體定義可在各自的Component下定義,而不必統一集中在commonapp下);定義實體及實體的相關屬性(其實也就是相當于數據庫的各種對象,需要注意的是,后續進行數據提取時,如果需要關聯到多張表,也需要在這里面定義一個view-entity);

    2、 services.xml:如果必要的話,可以這里邊定義一些服務;

    3、 data:一些初始配置數據,應該是相對固定,不經常變動的才放在這邊,可通過Webtool工具導入到數據庫中;

    4、 src:如改動了一些Java源文件內容后,需要重新編譯該目錄的文件,可通過UltraEdit的工具配置來進行ant編譯,非常方便,推薦使用,編譯后的文件將生成到build目錄下,生成的文件有各個class文件,也有一些.jar包(放在lib目錄下),這些jar包是我們在Web應用中需要引用到的,當然,引用哪些包也是可配置的,下面會講到;

    5、 ofbiz-component.xml:主要的配置文件,需要注意的一些東西:

    (1)<classpath type="jar" location="build/lib/*"/> 這是jar引用路徑,我在考慮是否可改成直接引用class文件,也就是直接設置class文件所在的目錄;

    (2)title="Study" 這個就是我們通過appbar.ftl文件在主界面顯示的那一排按鈕上顯示的內容,可根據需要調整,調整完要重啟OFBiz,麻煩,可以考慮通過hot-deploy目錄進行發布。

    至于其他一些配置,很簡單,看看就曉得。

    下面講一下Web應用配置,Web應用配置中涉及到的最重要的兩個文件是:controller.xml和regions.xml,controller.xml文件主要是配置request-map,也就是請求映射關系,所有的請求映射都需要在這里邊進行配置,也就是我們在Web頁面上常看到的/login等,如果涉及到view-map類型是region,就需要從region.xml文件中去讀取配置,其實也就是配置各個region引用的處理頁面(可以是各種開發語言,比如Jsp、ftl等等)。另外,在region.xml配置文件中最重要的一部分就是MAIN_REGION的配置,就是整個網頁布局的配置,包括header、appbar、error、content、footer等等,其中appbar就是我們在前面剛剛提到的主界面上那一排按鈕的配置了,header、footer和error太簡單,不說了,我們主要要修改的東西都是在content這一塊上進行展現。
    網頁中用到的一些樣式、公用的定義都是在main_template.jsp中寫入的,也需要在MAIN_REGION的屬性中配置引用的文件。樣式定義文件是引用images這個component,所以這個也是關鍵,不能缺的。

    最后,講一講我對數據庫訪問的一些簡單的了解:對數據庫的訪問主要是通過GenericDelegator進行控制,包括一些常用的方法,如findAll、remove、store、create等等,具體的用法要去研究一下,其實也不算復雜,先建立一個GenericDelegator,如果是create、store就可以通過makeValue方法將一些字段的值設置到GenericValue,之后再進行store或是create,具體語法要去參考一些文檔,還沒去看這一塊的東西。

    最最需要訪問的一些文檔:OFBizChina 實體引擎配置指南、OFBizChina 區塊(Region)指南、OFBizChina 服務引擎配置指南、OFBizChina JSP標簽庫指南,當然,研究OFBiz的前提是要首先要理解MVC模式的概念,也就是View-Model-Control,否則一切都是空談。

    補充幾點:
    1、 對于Ofbiz構造動態查詢語句
    (1) 構造查詢條件
    (2) 給每個條件之間加上邏輯關系,用mainCond = new EntityConditionList(andExprs, EntityOperator.AND);
    (3) 設置要顯示的字段列表
    (4) 設置排序字段列表
    (5) 設置Distinct列表
    EntityFindOptions findOpts = new EntityFindOptions(true, EntityFindOptions.TYPE_SCROLL_INSENSITIVE, EntityFindOptions.CONCUR_READ_ONLY, true);
    (6) 獲取實體列表
    EntityListIterator pli = delegator.findListIteratorByCondition(entityName, mainCond, null, fieldsToSelect, orderBy, findOpts);
    (7) 一個動態查詢語句的具體實例
    <%
    String entityName="study";
    List andExprs = new ArrayList();
    String number="";
    String name="";
    String sex="";
    String tel="";
    //GenericDelegator delegator = GenericDelegator.getGenericDelegator("default");
    EntityConditionList mainCond=null;
    if (request.getParameter("number")!=null)
    number=request.getParameter("number").toString();
    if (request.getParameter("name")!=null)
    name=request.getParameter("name").toString();
    if (request.getParameter("sex")!=null)
    sex=request.getParameter("sex").toString();
    if (request.getParameter("tel")!=null)
    tel=request.getParameter("tel").toString();
    //構造查詢條件
    if (number.compareTo("")!=0)
    andExprs.add(new EntityExpr("number",EntityOperator.EQUALS,number));
    if (name.compareTo("")!=0)
    andExprs.add(new EntityExpr("name1",true,EntityOperator.LIKE,"%"+name+"%",true));
    if (sex.compareTo("")!=0)
    andExprs.add(new EntityExpr("sex1",true,EntityOperator.LIKE,"%"+sex+"%",true));
    if (tel.compareTo("")!=0)
    andExprs.add(new EntityExpr("tel",true,EntityOperator.LIKE,"%"+tel+"%",true));
    //每個條件間的邏輯關系
    if (andExprs.size() > 0)
    mainCond = new EntityConditionList(andExprs, EntityOperator.AND);
    //要顯示的字段列表
    List fieldsToSelect = new ArrayList();
    fieldsToSelect.add("number");
    fieldsToSelect.add("name1");
    fieldsToSelect.add("sex1");
    fieldsToSelect.add("tel");
    //排序字段列表
    List orderBy = UtilMisc.toList("number", "name1");
    //Distinct列表
    EntityFindOptions findOpts = new EntityFindOptions(true, EntityFindOptions.TYPE_SCROLL_INSENSITIVE, EntityFindOptions.CONCUR_READ_ONLY, true);
    //獲取實體列表
    EntityListIterator pli = delegator.findListIteratorByCondition(entityName, mainCond, null, fieldsToSelect, orderBy, findOpts);
    while(pli.hasNext())
    {
    GenericValue cust = (GenericValue)pli.next();%>
    <tr>
    <td><%=cust.getString("number")%></td>
    <td><%=cust.getString("name1")%></td>
    <td><%=cust.getString("sex1")%></td>
    <td><%=cust.getString("tel")%></td>
    </tr>
    <%}%>

    </table>

    2、 對于所有的圖片文件,都放在images目錄下
    3、 設置圖片的標簽<ofbiz:contenturl>圖片路徑</ofbiz:contenturl>
    4、 鏈接Tag <ofbiz:url>control.xml里面設置的請求</ofbiz.url>
    5、 <region:render section='header'/>引入header定義的文件
    header這個標識在regions.xml里面定義
    <define id='MAIN_REG' template='/templates/main_template1.jsp'>
    <put section='title'>Application Page</put> <!-- this is a default and is meant to overridden -->
    <put section='header' content='/includes/bottom.jsp'/>
    <put section='leftbar' content='/includes/left.jsp'/>
    <put section='middle' content='/includes/middle.jsp'/>
    <put section='content' content='/includes/middle.jsp'/> <!-- this is a default and is meant to overridden -->
    <put section='top' content='/includes/top.jsp'/>
    <put section='error' type="jpublish" content='/includes/errormsg.ftl'/>
    <!--<put section='footer' type="jpublish" content='/includes/footer.ftl'/>-->
    </define>
    然后其它頁面只要如下定義即可
    <define id='BasePubEmp' region='MAIN_REG'>
    <put section='title'>View BasePubEmp</put>
    <put section='content' content='/BasePubEmp.jsp'/>
    </define>
    注意,這邊的content所指定的區塊就是我們上面定義的content
    6、 這些標簽都挺簡單的,Ofbiz里面都有例子,參照一下就可以了

    posted on 2007-04-19 15:49 常言笑 閱讀(2187) 評論(0)  編輯  收藏 所屬分類: JAVA/J2EE

    My Links

    Blog Stats

    常用鏈接

    留言簿(5)

    隨筆分類

    隨筆檔案

    搜索

    積分與排名

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 7x7x7x免费在线观看| 亚洲天堂视频在线观看| 成人在线免费看片| 一级毛片免费不卡直观看| 亚洲综合一区无码精品| 老汉色老汉首页a亚洲| 亚洲精品专区在线观看| 四虎在线免费播放| 18成禁人视频免费网站| 最近免费中文字幕中文高清| 国产成人高清亚洲一区91| 日韩亚洲国产综合高清| 777亚洲精品乱码久久久久久| 亚洲一区二区女搞男| 免费在线观看黄色毛片| 日韩免费毛片视频| 在线免费一区二区| 99久久免费国产香蕉麻豆| 999久久久免费精品播放| 青青草原1769久久免费播放| 久久久久久毛片免费看| 一区二区三区免费在线视频 | 久久久久久久久久国产精品免费| 国产亚洲精品91| 中文字幕亚洲精品无码| 亚洲日本乱码一区二区在线二产线| 午夜亚洲国产理论秋霞| 久久精品国产亚洲AV麻豆~| 亚洲av激情无码专区在线播放 | 韩国免费a级作爱片无码| 成人国产精品免费视频| 久99久无码精品视频免费播放| 国产精品视频全国免费观看| 精品久久久久久国产免费了| 好湿好大好紧好爽免费视频| 中文字幕在线免费视频| 日韩精品在线免费观看| 久久午夜伦鲁片免费无码| xxxxx免费视频| 一二三四在线观看免费高清中文在线观看 | 国产亚洲视频在线观看|