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

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

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

    posts - 40,  comments - 187,  trackbacks - 0
    說在前面的話:
    ??????書接上回(間隔很久了,抱歉,各位看官!),Charpter1介紹了Portlet的一些基礎知識,本章從一個實例的開發,介紹如何應用Spring Portlet MVC開發自己的Portlet。

    Charpter2 Spring Portlet MVC實例開發

    實例介紹:
    實現一個簡單的用戶注冊詳細信息的編輯與查看功能。
    ?
    開發環境:
    Dev Tool: Eclipse 3.2
    Web Server: Tomcat 5.5
    Framework: Spring 1.2.8 +?Spring Portlet MVC + Hibernate 3.2.0.GA
    Portal Server:?Liferay Portal 4.3.0
    Database: Oracle 9i

    開發過程:

    0) 建立工程結構

    整個工程
    whole_project.jpg

    source包下的結構:
    src.jpg


    web包下的結構:
    web.jpg

    1) 創建Model
    創建注冊信息的Model實體,如下代碼:

    /**
    ?*?WsspUser?申報用戶信息
    ?*?
    @author?Allen
    ?
    */


    @SuppressWarnings(
    "serial")
    @Entity
    @Table(name?
    =?"MY_USER")
    @Cache(usage?
    =?CacheConcurrencyStrategy.READ_WRITE)
    public?class?WsspUser?extends?BaseNameObject?{

    ????
    /**?public?attrrbutes?**/
    ????@Column(length?
    =?100)
    ????
    private?String?userType;//標識會員類型?企業會員:E?政府會員:G?個人會員:P?社團會員:C?其他會員:O
    ????
    ????@Column(length?
    =?4)
    ????
    private?int?personActive;?//用戶狀態:1?啟用,0?停用
    ????
    ????@Column(length?
    =?4)
    ????
    private?int?actAsAgent;?//是否為代辦:1?是,0?不是
    ????
    ????
    private?String?surrogateId;?//代辦人員編號
    ????private?String?wsspPersonId;?//用戶唯一標識,存放Liferay生成的用戶ID
    ????
    ????
    private?String?initials;?//昵稱
    ????
    ????@Temporal(TemporalType.TIMESTAMP)
    ????
    private?java.util.Date?createTime;?//創建日期
    ????
    ????@Temporal(TemporalType.TIMESTAMP)
    ????
    private?java.util.Date?modifyTime;//修改日期
    ????
    ????
    private?String?createBy;//創建人
    ????private?String?modifyBy;//修改人

    ????
    ????
    /**?personal?attrrbutes?**/
    ????
    private?String?trueName;?//用戶真實姓名
    ????
    ????@Column(length?
    =?100)
    ????
    private?String?sex;?//性別
    ????
    ????@Temporal(TemporalType.TIMESTAMP)
    ????
    private?java.util.Date?birthday;?//出生年月日
    ????
    ????
    ????
    /**?enterprise?attrrbutes?**/
    ????@Column(length?
    =?10)
    ????
    private?int?capital;?//注冊資金(萬元)
    ????
    ????
    private?String?businessCategory;?//經營范圍
    ????private?String?legalRepresentative;?//法人代表
    ????private?String?businessLicense;?//工商營業執照號、社團登記證號碼
    ????
    ????@Column(length?
    =?100)
    ????
    private?String?identityType;?//標識證件類別?身份證:I、軍官證:M、護照:P、其他證件:O
    ???
    ????
    private?String?identityCard;?//有效證件號、法人有效證件號
    ????private?String?address;?//住址、注冊地址、辦公地址
    ????private?String?postalCode;?//郵政編碼
    ????private?String?telephone;?//聯系電話、單位聯系電話
    ????private?String?mobile;?//手機、單位聯系人手機
    ????private?String?fax;?//單位傳真、個人傳真
    ????private?String?mail;?//電子郵件
    ????private?String?url;?//網址

    ????????.......

    2) 創建持久層和Service層

    ???包括持久層和服務層的類和配置文件都很簡單,不做表述了。我這里是將這兩層合并了。
    ?
    3) 創建表現層Controller

    ???這里以查看動作的Controller為例
    /**
    ?*?UserRegViewController
    ?*?
    @author?Allen
    ?*?@time?10:09:34?AM?Mar?3,?2008
    ?
    */

    public?class?UserRegViewController?extends?BaseController?{

    ????
    private?UserRegisterService?userRegisterService;
    ????
    ????
    public?void?setUserRegisterService(UserRegisterService?userRegisterService)?{
    ????????
    this.userRegisterService?=?userRegisterService;
    ????}

    ????
    ????@Override
    ????
    protected?void?doFillData(RenderRequest?req,?Map?model)?{
    ????????
    //0)?get?user?id?in?the?portlet
    ????????String?uid?=?req.getRemoteUser();
    ????????//1)?find?the?user's?properties?in?gea
    ????????WsspUser?wsspUser;
    ????????
    if?(null?==?uid)?uid?=?"";
    ????????String?hql?
    =?"FROM?WsspUser?AS?u?WHERE?u.wsspPersonId?=??";
    ????????wsspUser?
    =?userRegisterService.findForUnique(hql,?new?Object[]{uid});
    ????????
    //2)?if?cannot?find?the?user?by?liferay?user?id,?it?means?we?haven't?set?the?properties?
    ????????if?(null?==?wsspUser)?{
    ????????????wsspUser?
    =?new?WsspUser();
    ????????????wsspUser.setWsspPersonId(uid);
    ????????}

    ????????model.put(
    "wsspUser",?wsspUser);
    ????}

    ????
    }

    4) 配置 Spring Portlet MVC

    ???創建userregister.xml配置文件
    <?xml?version="1.0"?encoding="UTF-8"??>
    <!DOCTYPE?beans?PUBLIC?"-//SPRING//DTD?BEAN//EN"?"../../dtd/spring-beans.dtd">
    <beans>
    ????
    <bean?id="userRegControllerTemplate"?abstract="true">
    ????????
    <property?name="userRegisterService"?ref="userRegisterService"?/>
    ????
    </bean>
    ????
    ????
    <!--?view?page?for?user?details?-->
    ????
    <bean?id="userRegViewController"?class="net.allen.portlet.userregister.controller.UserRegViewController"?parent="userRegControllerTemplate">
    ????????
    <property?name="viewName"?value="userregister/userView"?/>
    ????
    </bean>
    ????
    ????
    <bean?id="userRegEditController"?class="net.allen.portlet.userregister.controller.UserRegEditController"?parent="userRegControllerTemplate">
    ????????
    <property?name="sessionForm"?value="true"/>
    ????????
    <property?name="commandName"?value="wsspUser"?/>
    ????????
    <property?name="commandClass"?value="net.allen.portlet.userregister.domain.WsspUser"?/>
    ????????
    <property?name="formView"?value="userregister/userEdit"?/>
    ????
    </bean>
    ????
    ????
    <!--?Handler?Mapping?-->
    ????
    <bean?id="parameterMappingInterceptor"?class="org.springframework.web.portlet.handler.ParameterMappingInterceptor"/>

    ????
    <bean?id="portletModeParameterHandlerMapping"?class="org.springframework.web.portlet.handler.PortletModeParameterHandlerMapping">
    ????????
    <property?name="order"?value="10"/>
    ????????
    <property?name="interceptors">
    ????????????
    <list>
    ????????????????
    <ref?bean="parameterMappingInterceptor"/>
    ????????????????
    <ref?bean="openSessionInViewInterceptor"/>
    ????????????
    </list>
    ????????
    </property>
    ????????
    <property?name="portletModeParameterMap">
    ????????????
    <map>
    ????????????????
    <entry?key="view">
    ????????????????????
    <map>
    ????????????????????????
    <entry?key="viewUser"><ref?bean="userRegViewController"/></entry>
    ????????????????????????
    <entry?key="editUser"><ref?bean="userRegEditController"/></entry>
    ????????????????????
    </map>
    ????????????????
    </entry>
    ????????????
    </map>
    ????????
    </property>
    ????
    </bean>

    ????
    <bean?id="portletModeHandlerMapping"?class="org.springframework.web.portlet.handler.PortletModeHandlerMapping">
    ????????
    <property?name="interceptors">
    ????????????
    <ref?bean="openSessionInViewInterceptor"/>
    ????????
    </property>
    ????????
    <property?name="portletModeMap">
    ????????????
    <map>
    ????????????????
    <entry?key="view"><ref?bean="userRegViewController"/></entry>
    ????????????
    </map>
    ????????
    </property>
    ????
    </bean>

    ????
    <!--?Exceptions?Handler?-->
    ????
    <bean?id="defaultExceptionHandler"?parent="defaultExceptionHandlerTemplate"/>
    ????
    </beans>

    5) 創建View層(采用JSP)

    ???????
    采用JSP處理表現層頁面,其中采用Liferay的portlet標簽做參數傳遞或觸發動作,不在這里贅述了。下面的一段示例顯示了EDIT和HOME的鏈接操作。 - EDIT - HOME -

    ???...
    <p?style="text-align:center;">-?
    ????
    <a?href="<portlet:renderURL>
    ????????????<portlet:param?name="
    action"?value="editUser"/>
    ????????????
    <portlet:param?name="ID"?value="${model.wsspUser.id}"/>
    ????????????
    <portlet:param?name="uid"?value="${model.wsspUser.wsspPersonId}"/>
    ????????
    </portlet:renderURL>"><spring:message?code="button.edit"/></a>?-?
    ????
    <a?href="<portlet:renderURL?portletMode="view"/>"><spring:message?code="button.home"/></a>
    -
    </p>
    ???...

    6) 配置Liferay Portlet

    ·在portlet.xml中添加
    <portlet>
    ????????
    <portlet-name>userregister</portlet-name>
    ????????
    <display-name>My?User?Register</display-name>
    ????????
    <portlet-class>org.springframework.web.portlet.DispatcherPortlet</portlet-class>
    ????????
    <init-param>
    ????????????
    <name>contextConfigLocation</name>
    ????????????
    <value>classpath*:/config/spring/portlet/userregister.xml</value>
    ????????
    </init-param>
    ????????
    <supports>
    ????????????
    <mime-type>text/html</mime-type>
    ????????????
    <portlet-mode>view</portlet-mode>
    ????????
    </supports>
    ????????
    <portlet-info>
    ????????????
    <title>my?user?register</title>
    ????????
    </portlet-info>??????
    ????
    </portlet>


    ·在liferay-portlet.xml中添加
    <portlet>
    ????????
    <portlet-name>userregister</portlet-name>
    ????????
    <restore-current-view>false</restore-current-view>
    ????
    </portlet>

    ·在liferay-display.xml中添加(我將開發的Portlet添加到測試目錄中)
    <category?name="category.test">
    ????????
    <portlet?id="userregister"?/>
    ????
    </category>

    ·在web.xml中添加

    <!--liferay?Portlet?Context?Listener?Config-->

    ????
    <listener>
    ????????
    <listener-class>com.liferay.portal.kernel.servlet.PortletContextListener</listener-class>
    ????
    </listener>



    <!--?配置Liferay?Servlet?-->
    <servlet>
    ????????
    <servlet-name>liferayServlet</servlet-name>
    ????????
    <servlet-class>com.liferay.portal.kernel.servlet.PortletServlet</servlet-class>
    ????????
    <init-param>
    ????????????
    <param-name>portlet-class</param-name>
    ????????????
    <param-value>org.springframework.web.portlet.DispatcherPortlet</param-value>
    ????????
    </init-param>
    ????????
    <load-on-startup>0</load-on-startup>
    ????
    </servlet>



    <servlet-mapping>
    ????????
    <servlet-name>liferayServlet</servlet-name>
    ????????
    <url-pattern>/userregister/*</url-pattern>
    ????
    </servlet-mapping>



    <!--?添加liferay?taglib?-->
    <taglib>
    ????????
    <taglib-uri>http://java.sun.com/portlet</taglib-uri>
    ????????
    <taglib-location>/WEB-INF/tld/liferay-portlet.tld</taglib-location>
    ????
    </taglib>
    ????
    <taglib>
    ????????
    <taglib-uri>http://liferay.com/tld/portlet</taglib-uri>
    ????????
    <taglib-location>/WEB-INF/tld/liferay-portlet-ext.tld</taglib-location>
    ????
    </taglib>????


    ?
    ??????經過這六步的操作,一個簡單的Portlet就完成了,現在可以部署Portlet應用到服務器中,在Liferay里體驗自己開發的Portlet了,是不是很簡單呢,呵呵。


    ????????????????????????????????????????????????????????????????????????????????????????????THE END
    posted on 2008-07-03 13:25 小立飛刀 閱讀(3718) 評論(3)  編輯  收藏 所屬分類: Portal

    FeedBack:
    # re: 應用Spring Portlet MVC開發自己的Portlet(2)
    2008-07-11 15:34 | qqq
    羅主要是能提供代碼讓我們看看就好了  回復  更多評論
      
    # re: 應用Spring Portlet MVC開發自己的Portlet(2)
    2008-07-11 16:55 | 小立飛刀
    @qqq

    用空補個代碼上來 呵呵 最近很忙
      回復  更多評論
      
    # re: 應用Spring Portlet MVC開發自己的Portlet(2)
    2008-11-28 16:56 | freelancer
    How beautifully  回復  更多評論
      
    <2008年7月>
    293012345
    6789101112
    13141516171819
    20212223242526
    272829303112
    3456789

    生存或毀滅,這是個必答之問題:是否應默默的忍受坎苛命運之無情打擊,還是應與深如大海之無涯苦難奮然為敵,并將其克服。此二抉擇,究竟是哪個較崇高?

    常用鏈接

    留言簿(12)

    隨筆分類(43)

    相冊

    收藏夾(7)

    朋友的博客

    電子資料

    搜索

    •  

    積分與排名

    • 積分 - 302633
    • 排名 - 192

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 亚洲国产人成在线观看69网站| 四虎影视在线永久免费看黄| 国产亚洲成AV人片在线观黄桃| 污污视频免费观看网站| 免费看无码自慰一区二区| 亚洲AV日韩综合一区尤物 | 产传媒61国产免费| 青青青国产色视频在线观看国产亚洲欧洲国产综合| 激情亚洲一区国产精品| 国产精品成人免费视频网站京东| 亚洲综合校园春色| 午夜成人免费视频| 立即播放免费毛片一级| 亚洲一区二区高清| 日韩免费观看一区| 国产91在线|亚洲| 日韩一区二区免费视频| 一级一级一级毛片免费毛片| 国产精品亚洲综合一区| 日本免费中文字幕| 亚洲成a人片在线观看中文!!!| 在线看片免费不卡人成视频| 亚洲av无码专区青青草原| 亚洲精品国产精品乱码不卞| 在线成人精品国产区免费| 亚洲天堂电影在线观看| 日本一道综合久久aⅴ免费| 亚欧乱色国产精品免费视频| 亚洲综合婷婷久久| 成年女人色毛片免费看| 人妻仑乱A级毛片免费看| 久久精品国产亚洲AV无码麻豆 | 久久亚洲美女精品国产精品| 青春禁区视频在线观看直播免费 | 亚洲伊人tv综合网色| 成人奭片免费观看| 猫咪www免费人成网站| 亚洲天堂在线播放| 国产免费一区二区三区VR| 免费精品一区二区三区第35| 亚洲乱妇熟女爽到高潮的片 |