上一篇文章中提出了一个问题:在liferay中什么时候,什么地方/c变成/c/portal/layout。
晚上加班,顺便查了查资料,终于找到了问题的答案。
在http://wiki.liferay.com/index.php/Page_Rendering 明确的给出了答案。下面简单重复一下:
1、请求由MainServlet进行处理。一些属性被存储到了session和request中。WebKeys.CURRENT_URL保存了当前请求的路径。
2、ServicePreAction被调用,决定调用那个layout, theme进行显示。当前使用的layout被存储在WebKeys.LAYOUT的request属性中。其他可用的layouts存储在request的WebKeys.LAYOUTS属性中。Theme在WebKeys.THEME中,颜色在WebKeys.COLOR_SCHEME中。
3、调用Struts 来处理请求。liferay中使用com.liferay.portal.struts.PortalRequestProcessor。这个类的getLastPath方法,就会返回<protocol>://<hostName>:<port>/portal/layout,p_l_id是一个可选参数。
4、/portal/layout请求就可以通过struts_config的定义来调用LayoutAction执行。http://www.smilingleo.cn
5、其他部分,不在重复了。自己看代码或看别人的资料吧。