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 -

   ...
<style="text-align:center;">
    
<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> - 
    
<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 小立飞刀 阅读(3710) 评论(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)

朋友的博客

电子资料

搜索

  •  

积分与排名

  • 积分 - 302060
  • 排名 - 192

最新评论

阅读排行榜

评论排行榜