如何查找-在Liferay 6.1的哪些页面上部署了哪些Portlet?

如何查找-在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映射到组织中的页面,我需要查看哪些数据库表?如果有这样的事?!我们正在使用Liferay 6.1.20

这是一个解决方案,一个免费的市场插件,可以解决您的问题


以下是从第一列获取所有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