转载,请注明原创地址:http://blog.csdn.net/lan861698789/article/details/8049481
1、velocity的国际化
$languageUtil.get($locale, "toggle-edit-controls")。这里的msgKey就是你的资源文件中的键值。
2、init.jsp
\liferay-portal-src-6.1.10-ee-ga1\portal-web\docroot\html\common\init.jsp
有一个<liferay-theme:defineObjects/>标签,该标签对应的DefineObjectsTag就是将很多liferay的变量放到pageContext。
3、用户图片显示
今天需要在VM 中显示用户图片不知道怎么去拿。deubg看源码,发现liferay主页 上显示的小图片 是在
\liferay-portal-src-6.1.10-ee-ga1\portal-web\docroot\html\portlet\dockbar\view.jsp 中显示的。
源码:
<aui:a cssClass='<%= "user-portrait" + useDialog %>' data-controlPanelCategory="<%= controlPanelCategory %>" href="<%= themeDisplay.getURLMyAccount().toString() %>" title="manage-my-account">
<img alt="<%= HtmlUtil.escape(user.getFullName()) %>" src="<%= HtmlUtil.escape(user.getPortraitURL(themeDisplay)) %>" />
</aui:a>
但是 我 那个VM 中却 得不到request 和 themdisplay。但是可以得到user。现在需要的是imagePath,就是从themdisplay中取出的。
于是看源码themdisplay是怎么放这个 imagePath 的。
点击页面标签 <liferay-theme:defineObjects />,进入tld,然后进入DefineObjectsTag.java,发现 pageContext.setAttribute("themeDisplay", themeDisplay); 这个没用,这里是将所有themdisplay中的东西放到pageContent去,方便页面直接取出。
继续查找“setPathImage”,发现liferay-portal-src-6.1.10-ee-ga1\portal-impl\src\com\liferay\portal\events\ServicePreAction.java
themeDisplay.setPathImage(imagePath);//在这里初始化了themdisplay。
继续找
String imagePath = dynamicResourcesCDNHost.concat(PortalUtil.getPathImage());
原来这个imagePath就是从PortalUtil.getPathImage()取出来的。
OK 了,那我就直接从 PortalUtil.getPathImage() 取值好了。
在 \liferay-portal-src-6.1.10-ee-ga1\portal-impl\src\com\liferay\portal\velocity\VelocityVariablesImpl.java 已经把PortalUtil 放到 velocityContext 中去了。我的VM就能直接去取了。
4、lifeary权限问题
在liferay-portal-src-6.1.10-ee-ga1\portal-impl\src\com\liferay\portal\events\ServicePreAction.java,
运行很多程序都会去检查你的权限,那么权限是在哪里设置的了?
在这个类中,首先会去request中拿出你的user:
user = PortalUtil.getUser(request);
如果user为空,则
if (user == null) {
user = company.getDefaultUser();
}
这是去user_表中 拿defaultuser = 1的数据。
然后就是设置权限
PermissionChecker permissionChecker = PermissionCheckerFactoryUtil.create(user);
PermissionThreadLocal.setPermissionChecker(permissionChecker);
以后在其他的地方就会这么调用,看liferay-portal-src-6.1.10-ee-ga1\portal-service\src\com\liferay\portal\service\base\PrincipalBean.java,77行。
public PermissionChecker getPermissionChecker() throws PrincipalException {
PermissionChecker permissionChecker = PermissionThreadLocal.getPermissionChecker();
if (permissionChecker == null) {
throw new PrincipalException("PermissionChecker not initialized");
}
return permissionChecker;
}
在一些地方调用liferay的service时候会抛异常,说
com.liferay.portal.security.auth.PrincipalException: PermissionChecker not initialized
at com.liferay.portal.service.base.PrincipalBean.getPermissionChecker(PrincipalBean.java:82)
这时候,有两种解决办法:
1)、和上面拿到user_表中默认user,然后设到PermissionChecker中。
2)、指定自己的user
User user = UserLocalServiceUtil.getUserByScreenName("joe_user");
PermissionChecker permissionChecker = PermissionCheckerFactoryUtil.create(user);
PermissionThreadLocal.setPermissionChecker(permissionChecker);
5、liferay官网列子
http://svn.liferay.com/repos/public/plugins/trunk/portlets/
guest/guest
各版本:http://svn.liferay.com/repos/public/plugins/branches/
插件下载地址:http://www.liferay.com/marketplace
6、关于配置liferay数据库问题
学习liferay6.0 或者 6.1时候,官网就说在liferay-portal-6.1.1-ce-ga2\tomcat-7.0.27\webapps\ROOT\WEB-INF\classes 下面增加一个portal-ext.properties的文件,里面放入
jdbc.default.driverClassName=com.mysql.jdbc.Driver
jdbc.default.url=jdbc:mysql://192.168.179.116/lportal_6_1?useUnicode=true&characterEncoding=UTF-8&useFastDateParsing=false
jdbc.default.username=root
jdbc.default.password=abc123_
那么还有其他办法吗?
我们还可以liferay-portal-6.1.1-ce-ga2\tomcat-7.0.27\webapps\ROOT\WEB-INF\lib\portal-imp.jar中找到portal.properties,注释掉Hypersonic的代码,然后把mysql的注释给消掉,最后重新将这个文件放入jar。这样就OK了。
其实,我们也可以在源码的liferay-portal-src-6.1.10-ee-ga1\portal-impl\src\portal.properties 找到这个文件里面的代码。