Java Liferay将参数传递给用于填充搜索容器列jsp的jsp

Java Liferay将参数传递给用于填充搜索容器列jsp的jsp,java,jsp,liferay,liferay-6,Java,Jsp,Liferay,Liferay 6,所以我有一个搜索容器,里面有搜索结果。此容器的最后一列是jsp列。以下是搜索容器的代码: <% PortletURL postsUrlPaginator = renderResponse.createRenderURL(); postsUrlPaginator.setParameter( "currentID", Long.toString( currentID ) ); postsUrlPaginator.setParameter( "jspPage",

所以我有一个搜索容器,里面有搜索结果。此容器的最后一列是jsp列。以下是搜索容器的代码:

    <%
    PortletURL postsUrlPaginator = renderResponse.createRenderURL();
    postsUrlPaginator.setParameter( "currentID", Long.toString( currentID ) );
    postsUrlPaginator.setParameter( "jspPage", "/admin/CLAdmin.jsp" );
    postsUrlPaginator.setParameter( "mainTabs", "Categories" );
    %>

    <liferay-ui:search-container emptyResultsMessage = "there-are-no-postings" delta = "5" iteratorURL="<%= postsUrlPaginator %>" curParam="postsUrlPaginator">
        <liferay-ui:search-container-results>
            <%
            List<CLPosting> postings = CLPostingLocalServiceUtil.getLockedPostings( true );
            results = ListUtil.subList( postings, searchContainer.getStart(), searchContainer.getEnd() );
            pageContext.setAttribute( "results", results );
            pageContext.setAttribute( "total", postings.size() );
            %>
        </liferay-ui:search-container-results>

        <liferay-ui:search-container-row 
            className="com.camelslist.posting.model.CLPosting"
            keyProperty="postID"
            modelVar="posting">

            <liferay-ui:search-container-column-text 
                name="postingTitle"
                property="postTitle" />

            <liferay-ui:search-container-column-text 
                name="locked"
                property="locked" />

            <liferay-ui:search-container-column-jsp
                path="/admin/post/CLAdmin_post_actions.jsp" />

        </liferay-ui:search-container-row>
        <liferay-ui:search-iterator />
    </liferay-ui:search-container>

我在最后一列中使用一个jsp文件(CLAdmin\u post\u actions.jsp)为返回的每一行生成操作按钮。我希望在jsp文件为每一行创建这些按钮之前,将值传递给该jsp文件

<%@include file="/init.jsp" %>

<%
ResultRow row = (ResultRow) request.getAttribute( WebKeys.SEARCH_CONTAINER_RESULT_ROW );
CLPosting posting = (CLPosting) row.getObject();
long groupId = themeDisplay.getLayout().getGroupId();
String name = CLPosting.class.getName();
String primeKey = String.valueOf( posting.getPrimaryKey() );
System.out.println( "posting: " + posting.getPostTitle() + " : " + "ID: " + Long.toString( posting.getPrimaryKey() ) );

long currentID = posting.getCategoryID();
CLCategory category = ( currentID != Long.valueOf( 0 ) ) ? CLCategoryLocalServiceUtil.getCLCategory( currentID ) : null;
long parentCatID = ( category != null ) ? category.getParentID() : Long.valueOf( 0 );
%>

<liferay-ui:icon-menu>
    <c:if test = "<%= permissionChecker.hasPermission( groupId, name, primeKey, ActionKeys.DELETE ) %>" >
        <portlet:actionURL name="deletePosting" var="deleteURL">
            <portlet:param name="resourcePrimeKey" value="<%= primeKey %>" />
            <portlet:param name="currentID" value="<%= Long.toString( currentID ) %>" />
        </portlet:actionURL>
        <liferay-ui:icon-delete url="<%= deleteURL.toString() %>" />
    </c:if>
    <c:if test="<%= permissionChecker.hasPermission(groupId, name, primeKey, ActionKeys.VIEW) %>" >
    </c:if>
    <c:if test="<%= permissionChecker.hasPermission(groupId, name, primeKey, ActionKeys.UPDATE) %>" >
        <c:if test="<%= posting.getLocked() == false %>" >
            <portlet:actionURL name="lockPosting" var="lockURL">
                <portlet:param name="resourcePrimeKey" value="<%= primeKey %>" />
                <portlet:param name="currentID" value="<%= Long.toString( currentID ) %>" />
                <portlet:param name="mainTabs" value="Categories" />
                <portlet:param name="lock" value="true" />
            </portlet:actionURL>
            <liferay-ui:icon image="lock" url="<%= lockURL.toString() %>" />
        </c:if>
        <c:if test="<%= posting.getLocked() == true %>" >
            <portlet:actionURL name="lockPosting" var="lockURL">
                <portlet:param name="resourcePrimeKey" value="<%= primeKey %>" />
                <portlet:param name="currentID" value="<%= Long.toString( currentID ) %>" />
                <portlet:param name="mainTabs" value="Categories" />
                <portlet:param name="lock" value="false" />
            </portlet:actionURL>
            <liferay-ui:icon image="unlock" url="<%= lockURL.toString() %>" />
        </c:if>
    </c:if>
    <c:if test = "<%= permissionChecker.hasPermission( groupId, name, primeKey, ActionKeys.PERMISSIONS) %>">
        <liferay-security:permissionsURL
            modelResource="<%= CLPosting.class.getName() %>"
            modelResourceDescription="<%= posting.getPostTitle() %>"
            resourcePrimKey="<%= primeKey %>"
            var="permissionsURL" />
        <liferay-ui:icon image="permissions" url="<%= permissionsURL.toString() %>" />
    </c:if>
</liferay-ui:icon-menu>


我该怎么做?我可以这样做吗?

事实上我自己回答了这个问题,答案很明显(我想对于经验丰富的portlet开发人员来说)

我试图通过参数传递所需的值。当我使用servlet属性时,我能够获得所需的值

下面是添加到上述代码中的内容,以使此答案更加清晰:

<%
//NEW LINES ADDED
String mainTabs = ParamUtil.getString( request, "mainTabs", "Categories" );
request.setAttribute( "mainTabs", mainTabs );

PortletURL postsUrlPaginator = renderResponse.createRenderURL();
postsUrlPaginator.setParameter( "currentID", Long.toString( currentID ) );
postsUrlPaginator.setParameter( "jspPage", "/admin/CLAdmin.jsp" );
postsUrlPaginator.setParameter( "mainTabs", "Categories" );
%>
//... additional code not shown

你能再解释一下吗?我对portlet技术/liferay没有太多经验。我正在使用liferay 6.1.1 GA2I can。上面的示例需要将信息发送到JSP。您可以将此类任务的信息存储为:request.setAttribute(“mainTabs”,mainTabs);然后,您可以执行以下操作来检索JSP中需要的信息:String mainTabs=(String)request.getAttribute(“mainTabs”);谢谢,但我使用了另一种方法,我们可以将liferay ui的属性:search container设置为searchContainer=“”,并将sc定义为renderResponse.createRenderURL().setParameter(“参数”,“值”);SearchContainer sc=新的SearchContainer(renderRequest,null,null,SearchContainer.DEFAULT_CUR_参数,delta,current,null,null);
String mainTabs = (String) request.getAttribute( "mainTabs" );