对于SpringMVC在portlet中的使用,在Spring的官方文档中已经有说了详细的说明(在spring-framework-reference中的19章。),这里参考官方文档进行配置。
Liferay版本:6.1.1 CE版本
Spring版本:3.2.0 GA
Liferay IDE: 1.6.1
一、导入SpringMVC portlet所需要的jar包。
§ spring-beans-3.2.0.RELEASE.jar
§ spring-context-3.2.0.RELEASE.jar
§ spring-core-3.2.0.RELEASE.jar
§ spring-expression-3.2.0.RELEASE.jar
§ spring-web-3.2.0.RELEASE.jar
§ spring-webmvc-3.2.0.RELEASE.jar
§ spring-webmvc-portlet-3.2.0.RELEASE.jar
二、新建一个Portlet插件开发的工程,可以使用Liferay IDE中的portlet创建向导建立一个普通的插件工程。
三、修改web.xml,在里面添加如下内容:
1. <servlet>
2. <servlet-name>ViewRendererServlet</servlet-name>
3. <servlet-class>org.springframework.web.servlet.ViewRendererServlet</servlet-class>
4. </servlet>
5. <servlet-mapping>
6. <servlet-name>ViewRendererServlet</servlet-name>
7. <url-pattern>/WEB-INF/servlet/view</url-pattern>
8. </servlet-mapping>
四、portlet.xml中的内容修改,portlet.xml中的主要内容如下,主要为portlet-class的内容,要使用spring的dispatcherPortlet,下面的init-param为非必须的,他配置的内容为当前portlet所对应的mvc配置信息的xml地址,如果不配置,则自动的在web-inf目录下面寻找名称和当前portlet-name一样的xml文件。
1. <portlet-name>SpringMVC</portlet-name>
2. <display-name>SpringMVC</display-name>
3. <portlet-class>org.springframework.web.portlet.DispatcherPortlet</portlet-class>
4. <init-param>
5. <name>contextConfigLocation</name>
6. <value>/WEB-INF/SpringMVC-portlet.xml</value>
7. </init-param>
8. <expiration-cache>0</expiration-cache>
9. <supports>
10. <mime-type>text/html</mime-type>
11. <portlet-mode>view</portlet-mode>
12. </supports>
五、springmvc的配置XML信息如下:SpringMVC-portlet.xml
1. <?xml version="1.0" encoding="UTF-8"?>
2. <beans xmlns="http://www.springframework.org/schema/beans"
3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
4. xmlns:context="http://www.springframework.org/schema/context"
5. xmlns:mvc="http://www.springframework.org/schema/mvc"
6. xsi:schemaLocation="http://www.springframework.org/schema/beans
7. http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
8. http://www.springframework.org/schema/context
9. http://www.springframework.org/schema/context/spring-context-3.2.xsd
10. http://www.springframework.org/schema/mvc
11. http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd">
12.
13. <context:component-scan base-package="com.huqiwen.portlet" />
14. <bean id="viewResolver"
15. class="org.springframework.web.servlet.view.InternalResourceViewResolver">
16. <property name="viewClass"
17. value="org.springframework.web.servlet.view.JstlView" />
18. <property name="prefix" value="/WEB-INF/jsp/" />
19. <property name="suffix" value=".jsp" />
20. </bean>
21. </beans>
可以看到这里和普通的SpringMVC的配置没有什么区别。
六、编写SpringMVC的controller类,如下:
1. @Controller
2. @RequestMapping(value = "VIEW")
3. public class SpringPortlet {
4.
5. @RenderMapping
6. public String view(Model model){
7. model.addAttribute("username", "huqiwen");
8. return "view";
9. }
10.
11. @RenderMapping(params = "action=edit")
12. public String edit(Model model){
13. model.addAttribute("edit", "action=edit");
14. return "edit";
15. }
16. }
说明:
@RequestMapping中的VIEW,代表当前的是portlet的VIEW模式,如果是EDIT模式,则将这里的VIEW换成edit即可。
@RenderMapping 默认对应的是portlet进入的时候执行的方法。
@RenderMapping(params = "action=edit") 这个请求的是对应于用户在页面中的请求,如JSP中有如下的portlet请求,则会进入到这个方法里面,这里param name可以自定义,不一定叫action,可以叫cmd,op等均可
1. <portlet:renderURL var="edit">
2. <portlet:param name="action" value="edit"/>
3. </portlet:renderURL>
一个简单的SpringMVC portlt示例下载:点击我
Liferay中Portal.properties文件保存着Liferay很多的平台级的配置参数,通过在这里调整一些参数的配置信息,可以满足许多不同的需求。一般我们定义Portal.properties里面的配置文件是不直接修改的,按配置liferay可以加载以下路径下面的配置参数来覆盖默认的
§ include-and-override=portal-bundle.properties
§ include-and-override=${liferay.home}/portal-bundle.properties
§ include-and-override=portal-ext.properties
§ include-and-override=${liferay.home}/portal-ext.properties
§ include-and-override=portal-setup-wizard.properties
§ include-and-override=${liferay.home}/portal-setup-wizard.properties
§ include-and-override=portal-${easyconf:companyId}.properties
§ include-and-override=${liferay.home}/portal-${easyconf:companyId}.properties
§ include-and-override=${external-properties}
§ include-and-override=${liferay.home}/${external-properties}
也就是这些配置参数在上面的任一文件里面修改都可以。我们一般将自定义的配置参数放在下面的两个配置文件里面。
portal-setup-wizard.properties(在Liferay第一次运行的时候生成,默认是在liferay-portal-6.1.1-ce-ga2目录下面)
portal-ext.properties(在tomcat/webapps/ROOT/WEB-INF/classess下面,不存在可以自己创建)
在上面可以看到上面有不少路径是引用的${liferay.home}这个路径,这个路径可以在配置参数里自己指定,如在portal-ext.properties里面添加
liferay.home=E:/code/liferay6.1/liferay-portal-6.1.1-ce-ga2
则就是将liferay.home的路径指向了E:/code/liferay6.1/liferay-portal-6.1.1-ce-ga2目录。
liferay中的文件存储路径默认是保存在和omcat同级的data/document_library目录下面,如果想要自定义,可以修改以下的参数。
dl.store.file.system.root.dir=${liferay.home}/data/document_library
这里定义的即为系统的文件存储路径,默认是和liferay.home的路径有关的,相对liferay.home的路径,当然也可以自定义会绝对路径,如
dl.store.file.system.root.dir=E:/liferay/document_library
Liferay默认会为每个用户建立一个公共页和私有页,其实这个是个人站点,但是在实际的使用中,有时候我们并不需要为每个用户都建立公共页和私有页,可以使用下面的参数禁用掉。
layout.user.private.layouts.enabled=false
layout.user.public.layouts.enabled=false
如果我们的系统是在企业内部使用,在用户登录的时候一般不需要用户同意使用协议、用户协议,可以使用下面的参数禁用掉此协议。
terms.of.use.required= false
Liferay默认在用户第一次登录的时候会提示用户,修改密码,但在实际的某些业务需求下,我们不需要这个提醒,可以使用下面的参数
users.reminder.queries.enabled=false
上面是之前写的,算是一个错误的描述。准确是在控制面板--密码策略里面进行调整。
users.reminder.queries.enabled=false
这个参数是调整,第一次登录的时候是否让用户输入找加密码的问题。
liferay默认是使用的c3p0的配置,有时候我们希望能够使用应用中间件的数据源,如tomcat或者weblogic的数据源,而不使用c3p0的,可以在配置里面添加
jdbc.default.jndi.name=jdbc/LiferayPool
在tomcat或weblogic里面配置数据源的名称为jdbc/LiferayPool,则liferay即可调用应用中间件的数据源。
liferay默认情况下,如果某一个用户没有权限查看一个portlet,则会提示"你的角色无权限访问这一portlet",我们很多时候并不是想简单的有这个提示,而想让没有权限的用户看不到这个portlet,则可以在配置里面添加这个配置参数
layout.show.portlet.access.denied=false
使用下面的参数定义文件的上传大小配置,单位字节,下面的这个配置是10M
dl.file.max.size=10485760
liferay默认使用email作为用户的登录名,有时候我们可能需要使用screen name或者userid作为登录的用户名,可以使用下面的参数修改(也可以在后台控制面板处修改)
使用屏幕名称
company.security.auth.type=screenName
使用用户ID
company.security.auth.type=userId
Liferay默认情况下,在后台添加的用户的密码是动态生成的基于DES加密的,我们有时希望新添加的用户的密码都是一样的,则使用下面的配置,表示生成的密码是静态的,默认密码为111111
passwords.passwordpolicytoolkit.generator=static
passwords.passwordpolicytoolkit.static=111111
有时发现像liferay中的站点设置,用户设置,portal设置中有不少我们不想要的类别,如用户设置中的openid,社交网络等,站点设置里面的搜索引擎优化等,这些在有些企业内部的系统时,不需要这些类别,也可以通过配置来完成。
我配置的一些信息如下:
#站点设置
sites.form.update.main=details,site-url,site-template
#用户信息
users.form.my.account.main=details,password,organizations,sites,user-groups,roles
users.form.my.account.identification=addresses,phone-numbers,additional-email-addresses,websites
users.form.my.account.miscellaneous=display-settings,comments,custom-fields
#portal信息
company.settings.form.configuration=general,authentication,users,mail-host-names,email-notifications
company.settings.form.identification=addresses,phone-numbers,additional-email-addresses,websites
company.settings.form.miscellaneous=display-settings
#页面设置
layout.form.update=details,seo,look-and-feel,layout,javascript,custom-fields,advanced
layout.set.form.update=look-and-feel,logo,javascript,advanced
如果现在有多个站点,比如有组织机构站点,有社区站点,默认情况下我们在浏览器输入http://localhost:8080是进入的liferay创建的Guest的站点,如果现在我们想让在输入上面的地址的时候进入其他站点,怎么做呢?可以使用下面的配置参数
virtual.hosts.default.site.name=xxx
后面的xxx这个具体等于多少,要查看数据库表group_表,此表里面有许多的社区,在此表的name字段下面寻找我们要默认进入的站点名称,替换上面的xxx。
注意:如果这里是中文字符,需要转换为unicode编码,如
virtual.hosts.default.site.name=\u5927\u5510\u6587\u5C71\u53D1\u7535\u6709\u9650\u516C\u53F8\u5185\u7F51 LFR_ORGANIZATION