如何查找-在Liferay 6.1的哪些页面上部署了哪些Portlet?
换句话说,为了将portlet映射到组织中的页面,我需要查看哪些数据库表?如果有这样的事?!我们正在使用Liferay 6.1.20这是一个解决方案,一个免费的市场插件,可以解决您的问题如何查找-在Liferay 6.1的哪些页面上部署了哪些Portlet?,liferay,Liferay,换句话说,为了将portlet映射到组织中的页面,我需要查看哪些数据库表?如果有这样的事?!我们正在使用Liferay 6.1.20这是一个解决方案,一个免费的市场插件,可以解决您的问题 以下是从第一列获取所有portlet的代码 ThemeDisplay themeDisplay = (ThemeDisplay) request.getAttribute(WebKeys.THEME_DISPLAY); Layout layout = themeDisplay.getLayout(); Layo
以下是从第一列获取所有portlet的代码
ThemeDisplay themeDisplay = (ThemeDisplay) request.getAttribute(WebKeys.THEME_DISPLAY);
Layout layout = themeDisplay.getLayout();
LayoutTypePortlet layoutTypePortlet = (LayoutTypePortlet) layout.getLayoutType();
List<Portlet> portlets = layoutTypePortlet.getAllPortlets("column-1");
for (Portlet portlet : portlets) {
// print your portlet.getPortletId() or do whatever you need
}
ThemeDisplay-ThemeDisplay=(ThemeDisplay)request.getAttribute(WebKeys.THEME\u DISPLAY);
Layout Layout=themeDisplay.getLayout();
LayoutTypePortlet LayoutTypePortlet=(LayoutTypePortlet)layout.getLayoutType();
List Portlet=layoutTypePortlet.GetAllPortlet(“第1列”);
for(Portlet:Portlet){
//打印portlet.getPortletId()或执行任何需要的操作
}
除了
如果您有权访问数据库,您可以在布局
表上启动一个简单的查询,以了解您的portlet添加到了哪些页面:
SELECT * FROM Layout WHERE typeSettings LIKE '%my_WAR_myportlet%';
您还可以使用ServiceBuilder构建一个FinderImpl,通过一个portlet执行此查询,并将该portlet添加到页面中,以便以您想要的任何格式显示
下面是另一个解决方案,它没有部署任何portlet,也没有访问数据库的权限(在MySQL数据库上测试):
Beanshell
import com.liferay.portal.kernel.dao.jdbc.DataAccess;
import com.liferay.portal.kernel.log.Log;
import com.liferay.portal.kernel.log.LogFactoryUtil;
import com.liferay.portal.kernel.util.StringBundler;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
Connection con = null;
PreparedStatement ps = null;
ResultSet rs = null;
try {
con = DataAccess.getUpgradeOptimizedConnection();
// your custom query here
String sqlQuery = "SELECT * FROM Layout WHERE typeSettings LIKE '%my_WAR_myportlet%'";
out.println("SQL Query: "+ sqlQuery);
ps = con.prepareStatement(sqlQuery);
rs = ps.executeQuery();
ResultSetMetaData rsmd = rs.getMetaData();
int columnCount = rsmd.getColumnCount();
List rows = new ArrayList();
List columnLabels = new ArrayList();
columnLabels.add("Sr. No.");
for (int c = 1; c <= columnCount; c++) {
String cl = rsmd.getColumnLabel(c);
columnLabels.add(cl);
}
while (rs.next()) {
List row = new ArrayList(columnCount);
for (int c = 1; c <= columnCount; c++) {
Object value = rs.getObject(c);
row.add(value);
}
rows.add(row);
}
// --- formatting the results ---
out.append("<div class=\"lfr-search-container \"><div class=\"results-grid\">");
out.append("<table class=\"taglib-search-iterator\">");
out.append("<thead>");
out.append("<tr class=\"portlet-section-header results-header\">");
for (String value : columnLabels) {
out.append("<th>");
out.append(value);
out.append("</th>");
}
out.append("</tr>");
out.append("</thead>");
out.append("<tbody>");
boolean alt = false;
long resultsCount = 1;
for (List line : rows) {
out.append("<tr class=\"portlet-section-alternate results-row " + (alt ? "alt" : "") + "\">");
// for sr. no.
out.append("<td>");
out.append(resultsCount + "");
out.append("</td>");
resultsCount = resultsCount + 1;
for (Iterator iterator = line.iterator(); iterator.hasNext();) {
Object value = (Object) iterator.next();
out.append("<td>");
if (value != null) {
out.append(value.toString());
} else {
out.append("<span style=\"font-style:italic\">null</span>");
}
out.append("</td>");
}
out.append("</tr>");
alt = !alt;
}
out.append("</tbody>");
out.append("</table>");
out.append("</div></div>");
} catch (Exception exp) {
out.println("ERROR: " + exp);
throw exp;
}
finally {
DataAccess.cleanUp(con, ps, rs);
}
import com.liferay.portal.kernel.dao.jdbc.DataAccess;
导入com.liferay.portal.kernel.log.log;
导入com.liferay.portal.kernel.log.LogFactoryUtil;
导入com.liferay.portal.kernel.util.StringBundler;
导入java.sql.Connection;
导入java.sql.PreparedStatement;
导入java.sql.ResultSet;
导入java.sql.ResultSetMetaData;
导入java.util.ArrayList;
导入java.util.Collections;
导入java.util.Iterator;
导入java.util.List;
连接con=null;
PreparedStatement ps=null;
结果集rs=null;
试一试{
con=DataAccess.getUpgradeOptimizedConnection();
//您的自定义查询在这里
String sqlQuery=“从布局中选择*类型设置,如“%my\u WAR\u myportlet%”;
out.println(“SQL查询:+sqlQuery”);
ps=con.prepareStatement(sqlQuery);
rs=ps.executeQuery();
ResultSetMetaData rsmd=rs.getMetaData();
int columnCount=rsmd.getColumnCount();
列表行=新建ArrayList();
List columnLabels=新建ArrayList();
columnLabels.添加(“Sr.编号”);
for(int c=1;c[layout]是一个表,您可以在其中找到部署在哪个页面上的portlet(typeSettings)。layoutset是您要查找的表。此外,liferay marketplace中有一个应用程序可用。(portlet位置跟踪器)还有布局表。感谢您提供了一个简单的解决方案!现在还不能投票,等我有了一定的声誉就可以了。工作起来很有魅力,真的很酷!从来没有在“控制面板”的“脚本”选项卡中出现过。现在我正在使用它。仍在学习Liferay。谢谢您的帮助:-)我很乐意。但是在stackoverflow中,有一种不同的方式来表达感谢…希望你知道我的意思;-)…heheI意识到,但我还没有足够的“资源”来感谢你:(我想你仍然可以接受这个作为回答,如果它解决了你的问题伟大的答案,我只编辑了它,所以答案是独立的(等待同行审查)。由于特定的“LIMIT”子句,您可以在日志中得到一个不言而喻的错误“[EditServerAction:523]…源文件:内联评估:`import com.liferay.portal.kernel.dao.jdbc.DataAccess;import com.liferay.portal….':TargetError
(Liferay作者,这是一个错误异常处理的示例)使用其他数据库时。或者只调用layoutTypePortlet.getAllPortlet()获取页面上的所有Portlet