liferay:在自定义taglib中呈现<portlet:renderurl> </portlet:renderurl>

时间:2013-07-20 04:17:04

标签: java jsp liferay portlet taglib

想要使用out.print()在我自己的 taglib 中创建指向其他portlet页面的链接,但在执行中,liferay无法呈现<portlet:renderURL> taglibs: taglib代码:

    int counter = 0;
    while (rs.next()) {
        counter++;
        int spcPk = Integer.parseInt(rs.getString("tCommodityGroupSpcPK"));
         result = "<tr>" +
                "        <td id=\"group-"+counter+"\">" +
                "            <a href=\"<portlet:renderURL><portlet:param name='jspPage'" +
                "             value='subGroup.jsp?p1="+spcPk+"'  /></portlet:renderURL>\" /> " +
                "       "+rs.getString("xa")+"    " +
                "            </a> " +
                "        </td> " +
                "        <td id=\"group-"+counter+"\">"+rs.getString("xx")+"</td> " +
                "        <td id=\"group-"+counter+"\">"+rs.getString("aa")+"</td> " +
                "        <td id=\"group-"+counter+"\">"+rs.getString("Result")+"</td> " +
                "    </tr>";

        out.print(result);

    }
    rs.close();
   // out.println(result);
    cstmt.close();
执行view.jsp和其他标签的

已经成功呈现,但是liferay taglibs没有..当我点击链接时,我在我的网址中有这样的东西!!

localhost:8081/%3Cportlet:renderURL%3E%3Cportlet:param%20name='jspPage'%20value='subGroup.jsp?p1=3'%20/%3E%3C/portlet:renderURL%3E

有人可以帮我在自定义taglib类中渲染taglib吗?

1 个答案:

答案 0 :(得分:0)

很明显,JSP Engine将您的标记视为任何其他标记。 您必须使用API而不是Tag,如下所述

PortletURL portletURL = renderResponse.createRenderURL();
portletURL.setParameter("jspPage", "subGroup.jsp?p1="+spcPk);

然后将portletURL.toString()注入标记

UPDATE:

如果您在renderRequest中定义renderResponse,则应该隐式访问<portlet:defineObjects />JSP

从普通request对象获取它们的另一种方法是

PortletResponse portletResponse = (PortletResponse)request.getAttribute(JavaConstants.JAVAX_PORTLET_RESPONSE);

您可以参考任何现有Liferay UI标签的源代码,例如asset-categories-navigation,以获取更多信息。