liferay5.0 plugins sdk开发(一)

第一次用plugins开发无疑等自于自杀,两个星期过去了,经历了无边的黑暗终于看到了光明。接着上一篇create.bat一个portlet,生成的一个portlet是一个最简单的portlet,如果只是普通的显示,OK是可以满足的。如果是一个复杂的则他是不能满足的,你需要做如下的修改:
(1)portlet.xml:<portlet-class>com.liferay.portlet.StrutsPortlet</portlet-class>JSPPortlet改为StrutsPortlet,view-jsp改为view-action,<value>改为自已的。这样就和struts绑上了。
(2)增加struts-config文件,文件里,可以根据自已的需要来定义message-resource,tiles.
(3)liferay-portlet.xml 增加上struts-path,<configuration-action-class>则根据需要。
(4)web.xml增加如下:
<servlet>
<servlet-name>PortletActionServlet</servlet-name>
<servlet-class>com.liferay.portal.struts.PortletActionServlet</servlet-class>
<init-param>
<param-name>config</param-name>
<param-value>/WEB-INF/struts-config.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
自定义servlet<load-on-startup>要从1开始,因为自动部署后0会被com.liferay.portal.kernel.servlet.PortletServlet占用。<taglib>liferay-portlet.tld也是自动部署后加上去,但是这是不够的,如果你要用到配置页,liferay-portlet-ext.tld是需要的,liferay-ui也经常会需要的,如果在页面上会用到themeid,layout之类的方法,那么你还要增加liferay-theme.tld。其他的可在项目中根据需要看是否要增加。
(5)在docroot下面增加META-INF/context.xml,文件内容如下:
<Context>
<Loader
loaderClass="com.liferay.support.tomcat.loader.PortalClassLoader"
/>
</Context>
不要小瞧这段话,他是至关重要的,让你当前的portlet依赖于lifeay的包。如果没有这个会报castException之类的错误,两个应用虽然引用的是同一个包,但是包不在同一个别lib下面,类型转换时会认为他们不是同一类型,这个问题看了一周,在lifeay官网上有人回答了这个错误的引起的原因,却没有告之解决方案,还是在一个好友的帮助之下解决了这个问题。
(6)生成的JSP都有这么一句话,<portlet:defineObjects />这个是就是第四点说的,liferay-portlet.tld标签中的一个,你的代码要写在这句话之下,他定义很多常用的类,如actionurl,renderurl,portletpreferences,具体可以看com.liferay.taglib.portlet.DefineObjectsTei,同样的liferay-theme.tld中也有<liferay-theme:defineObjects />他定义了themeDisplay,layout,permissionChecker,portletGroupId,theme,具体可以看com.liferay.taglib.theme.DefineObjectsTei。
按上面的配置改好后,基本就和ext中开发一样了,最后一点建义,自定义portlet工程,如果要引用包,不要放在WIN-INF/lib下面,放在sdk下面的lib下面,如果用到了除了lifeay之外的包可以放在WIN-INF/lib下面,因为deploy后他会把WIN-INF/lib下所有的包都部署过去,而有些包是只能加载一次的。
最后希望大家都能看到光明。
阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页