liferay 中 开发简单struts portlet

工作环境:
JDK  1.4
DATABASE SQLServer 2000
OS  Windows XP
预备工作:
01. 下载liferay-portal-src-4.0.0
02. 下载liferay-portal-tomcat-4.0.0.zip
一.创建liferay工作运行环境
01. 修改/build.properties中的javac.compiler=modern;javac.fork=true(使用标准的1.4/1.5编译器,使用单独JVM,避免报内存异常)
02. 根目录下ant start(我的电脑竟然编译了19分钟......-_-!!)
03. 修改/release.properties中的Directories(lp.eclipse.dir,lp.ext.dir,lp.source.dir),到你要新建项目的目录(以下称为工作目
录)
04. 修改/tools/ext_tmpl/build.properties中的javac.compiler=modern;javac.fork=true(此template作为以后porject复制所用)
05. 根目录下ant build-ext
06. copy下载的liferay-portal-tomcat-4.0.0.zip至工作目录/downloads下(STEP03中定义的目录)
07. 修改工作目录app.server.properties,放开app.server.type=tomcat配置 
08. 在工作目录/servers下ant install-tomcat
09. 修改工作目录/sql中的sql-server.arg.line=-n -U sa -P -i create/create-sql-server.sql加入自己的用户名密码
10. 在工作目录/sql下ant rebuild-sql-server
12. 下载最新的sql server jdbc驱动jtds,放至工作目录的/servers/tomcat/common/lib/ext下面
13. 修改/servers/tomcat/conf/Catalina/localhost/ROOT.xml的数据源配置为
<Resource name="jdbc/LiferayPool" auth="Container" type="javax.sql.DataSource"
driverClassName="net.sourceforge.jtds.jdbc.Driver" url="jdbc:jtds:Sqlserver://localhost/lportal" username="sa" password="sa"
maxActive="100" maxIdle="30" maxWait="10000" />
09. 在工作目录下/servers/tomcat/bin 运行startup.bat启动liferay
注:
01. STEP04可省略,在STEP08前在修改工作目录/build.properties中的javac.compiler=modern;javac.fork=true
02. STEP05可省略,ant会先检查downloads目录下是否有需要的版本,如果没有则自动下载,但是速度比较慢。如果确信你的tomcat-bin
版本和src版本一致则可以把那个zip重命名成他所要求的名字,系统就不会自动下载了
03. STEP12SQLServer驱动建议使用JTDS,官方的那个JDBC很不稳定,时常会抱错。
二.官方例子部署
01. 在目录/portlets下ant war
02. copy新生成的sample-jsf-myfaces-portlet.war;sample-jsf-sun-portlet.war;sample-json-portlet.war;sample-jsp-
portlet.war;sample-struts-portlet.war文件至工作目录的/portlets下面
03. 在工作目录/portlets下运行ant deploy
04. 在工作目录下/servers/tomcat/bin 运行startup.bat启动liferay,在test一栏下会发现新增加的portlet
注:
01. 在目录在目录/portlets下也有个ant deploy,但好像有些问题,因为时间关系,没有深究
02. 用户可以直接将war或解压后的文件夹放在webapp下(部署实际就是解压而以)
03. 以此(webapp)形式存放portlet启动时会对各个文件进行合并复制,影响启动速度。如果有大于10个的portlet,那启动速度会异常的慢
三.开发简单struts portlet(实际项目案例)
01. 修改工作目录ext-web/build.xml 把deploy的ext-ejb.jar改到放在liferay/WEB-INF/lib下,Language-ext.properties放到
liferay/WEB-INF/content下
 L81: <copy file="ext-ejb.jar" todir="${app.server.deploy.dir}/WEB-INF/lib" />
 L89: <property name="properties.dir" value="${app.server.deploy.dir}/lib/classes/content" />
02. 在liferay-portlet-ext.xml中加入
 <portlet>
  <portlet-name>1100</portlet-name>
  <struts-path>porject_managing</struts-path>
 </portlet>
03. 在portlet-ext.xml中加入
 <portlet>
  <portlet-name>1100</portlet-name>
  <display-name>Project Managin Portlet</display-name>
  <portlet-class>com.liferay.portlet.StrutsPortlet</portlet-class>
  <init-param>
   <name>view-action</name>
   <value>/porject_managing/view</value>
  </init-param>
  <expiration-cache>0</expiration-cache>
  <supports>
   <mime-type>text/html</mime-type>
  </supports>
  <resource-bundle>com.liferay.portlet.StrutsResourceBundle</resource-bundle>
  <security-role-ref>
   <role-name>power-user</role-name>
  </security-role-ref>
  <security-role-ref>
   <role-name>user</role-name>
  </security-role-ref>
 </portlet>
04. 在liferay-display中加入
 <category name="category.project">
  <portlet id="1100" />
 </category>
05. 在struts-config.xml中加入
 <action path="/porject_managing/view" forward="/portlet/porject_managing/view.jsp" />
 <action path="/porject_managing/edit_base_project" type="com.newtouch.portlet.project_managing.actions.ViewAction">
  <forward name="portlet.porject_managing.edit_base_project" path="/portlet/porject_managing/base_project.jsp"
/>
 </action>
06. 在ext/ext-web/docroot/html/porject_managing目录下添加 view.jsp和base_project.jsp
<<view.jsp>>
<%@ include file="/html/portlet/init.jsp" %>
<portlet:defineObjects />
<%
PortletURL portletURL = renderResponse.createRenderURL();
portletURL.setParameter("struts_action", "/porject_managing/edit_base_project");
portletURL.setWindowState(WindowState.MAXIMIZED);
%>
<table cellpadding="8" cellspacing="0" width="100%">
<tr>
 <%portletURL.setParameter("itype", "1");%>
 <td><a href="<%=portletURL.toString()%>"><%= LanguageUtil.get(pageContext, "asset") %></a></td>
 <%portletURL.setParameter("itype", "2");%>
 <td><a href="<%=portletURL.toString()%>"><%= LanguageUtil.get(pageContext, "undefined") %></a></td>
 <%portletURL.setParameter("itype", "3");%>
 <td><a href="<%=portletURL.toString()%>"><%= LanguageUtil.get(pageContext, "undefined") %></a></td>
</tr>
<tr>
 <%portletURL.setParameter("itype", "4");%>
 <td><a href="<%=portletURL.toString()%>"><%= LanguageUtil.get(pageContext, "undefined") %></a></td>
 <%portletURL.setParameter("itype", "5");%>
 <td><a href="<%=portletURL.toString()%>"><%= LanguageUtil.get(pageContext, "undefined") %></a></td>
 <%portletURL.setParameter("itype", "6");%>
 <td><a href="<%=portletURL.toString()%>"><%= LanguageUtil.get(pageContext, "undefined") %></a></td>
</tr>
</table>
<<base_project.jsp>>
<%@ taglib uri="http://java.sun.com/portlet
" prefix="portlet" %>
<portlet:defineObjects />
This is the <b>Sample JSP Portlet</b>. Use this as a quick way to include JSPs.
07. 启动eclipse,新建工程,并选择ext为project
08. 创建com.newtouch.portlet.project_managing.actions.ViewAction.java
package com.newtouch.portlet.project_managing.actions;
import javax.portlet.PortletConfig;
import javax.portlet.RenderRequest;
import javax.portlet.RenderResponse;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import com.liferay.portal.struts.PortletAction;
public class ViewAction extends PortletAction{
 public ActionForward render(ActionMapping mapping, ActionForm form,
   PortletConfig config, RenderRequest req, RenderResponse res)
   throws Exception {
  req.setAttribute("itype",req.getParameter("itype"));
  return mapping.findForward("portlet.porject_managing.edit_base_project");
 }
}
09. 在/ext/ext-ejb/classes/content目录下建立文件Language-ext_zh_CN.properties.native
##
## Language settings
##
lang.dir=ltr
lang.line.begin=left
lang.line.end=right
##
## Portlet titles
##
javax.portlet.title.1100=项目管理
##
## Category titles
##
category.project=项目
##
##Project Managing
##
asset=资产
undefined=未定义
10. 在改目录下运行native2ascii -encoding UTF-8 Language-ext_zh_CN.properties.native Language-ext.properties
11. 在工作目录ext/ext-ejb下运行ant deploy部署jar文件
12. 在工作目录ext/ext-web下运行ant deploy部署相关web文件
注:
01. 这个问题可能是由于版本跟新造成的,3.6时jar都放在common目录下,而4.0后jar放在了webapp/lib下,但是build没有跟新,如果仍
然放在common目录下由于调用次序原因就会造成类找不到以及语言属性文件找不到
02. struts-config.xml在部署时会重命名为struts-config-ext.xml,其他文件就是直接copy(为啥要这样做?)
03. 配置文件相关配置一览表
 struts-config:(web.xml)
  <servlet-name>MainServlet</servlet-name>
  <display-name>MainServlet</display-name>
  <servlet-class>com.liferay.portal.servlet.MainServlet</servlet-class>
  <init-param>
   <param-name>config</param-name>
   <param-value>/WEB-INF/struts-config.xml,/WEB-INF/struts-config-ext.xml</param-value>
  </init-param>
  ......
 tiles-defs:(struts-config.xml)
  <plug-in className="org.apache.struts.tiles.TilesPlugin" >
   <set-property property="definitions-config" value="/WEB-INF/tiles-defs.xml,/WEB-INF/tiles-defs-
ext.xml" />
   <set-property property="moduleAware" value="true" />
   <set-property property="definitions-parser-validate" value="true" />
  </plug-in>
 portlet.xml,liferay-portlet,liferay-display.xml:(com.liferay.portal.servlet.MainServlet)
  String[] xmls = new String[] {
   Http.URLtoString(ctx.getResource("/WEB-INF/portlet.xml")),
   Http.URLtoString(ctx.getResource("/WEB-INF/portlet-ext.xml")),
   Http.URLtoString(ctx.getResource("/WEB-INF/liferay-portlet.xml")),
   Http.URLtoString(ctx.getResource("/WEB-INF/liferay-portlet-ext.xml"))
  };
 Language.properties:(struts-config.xml)
  <message-resources parameter="content.Language,content.Language-ext"
factory="com.liferay.portal.struts.MultiMessageResourcesFactory" />
04. base_project.jsp目前只是简单实现,以后在下接中会加入表单
05. STEP07,liferay已经自动为您创建了工程,所以只要导入就可以了,如果机器速度较慢建议关掉自动编译
 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值