2014-04-25 6 views
1

내가하는 Liferay 사용하고 6.1 CE (을 Liferay 포털 커뮤니티 에디션 6.1.1 CE의 GA2 (팻/빌드 6101/2012년 7월 31일))하는 Liferay 포틀릿을 사용하여 : JSPF 파일 renderURL 태그

내가 설정하려면 컨트롤 패널의 테이블 레이아웃 컨트롤 팬의 첫 번째 페이지 (기본적으로 비어 있으며 왼쪽에서 메뉴를 선택하십시오. html/portal/layout/view/control-panel.jsp을 변경하고이 코드를 추가 할 후크에 일하고 있어요 :

<% 
String description2 = StringPool.BLANK; 

String className2 = "portlet-msg-info"; 

if (denyAccess|| 
    (themeDisplay.isStateExclusive() || 
     themeDisplay.isStatePopUp() || 
     (layoutTypePortlet.hasStateMax() && (portlet != null)) || 
      Validator.isNotNull(controlPanelCategory))) 
{ 
%> 

    <%@ include file="/html/portal/layout/view/panel_content.jspf" %> 

<% 
} else 
{ 
    if (Validator.isNull(description2)) { 
     //khane : here we should load control panel first page 
     //description = LanguageUtil.get(pageContext, "please-select-a-tool-  from-the-left-menu"); 
    %> 

     <%@ include file="/html/portlet/control_panel_menu/test.jspf" %> 

    <% 
    } 
} 
%> 

이 코드는 쇼를 내 페이지 test.jspf. 그것이 "제어판에서 왼쪽 도구를 선택하십시오"메시지 대신 첫 번째 제어판 페이지 인 경우,

하지만 내 문제는 약 test.jspf입니다. 대신 아이콘

[ActionURL Tag:71] Render response is null because tag is not being called within the context of a portlet 

및 링크가 동일한 페이지 (제어판 첫 번째 페이지)입니다 :

나는 html.portlet/control-panel-menu/view.jsp에가 비슷한 만들려고하지만, 처리 liferay-portlet:renderURL 태그에 나는이 오류가 아이콘에 링크를 생성 각각에 해당합니다. 이건 내 test.jspf 코드입니다 :

<% 
String[] allCategories2 = PortletCategoryKeys.ALL; 

String controlPanelCategory2 = HttpUtil.getParameter(PortalUtil.getCurrentURL(request), "controlPanelCategory", false); 

if (Validator.isNotNull(controlPanelCategory2)) { 
    allCategories2 = new String[] {controlPanelCategory2}; 
} 

for (String curCategory : allCategories2) { 
    List<Portlet> portlets = PortalUtil.getControlPanelPortlets(curCategory, themeDisplay); 
%> 

<ul class="category-portlets"> 

<% 
for (Portlet portlet2 : portlets) { 
    if (portlet2.isActive() && !portlet2.isInstanceable()) { 
     String portletId = portlet2.getPortletId(); 
%> 

<li class="<%= ppid.equals(portletId) ? "selected-portlet" : "" %>"> 
    <a href="<liferay-portlet:renderURL doAsGroupId="<%= themeDisplay.getScopeGroupId() %>" portletName="<%= portlet2.getRootPortletId() %>" windowState="<%= WindowState.MAXIMIZED.toString() %>" />" id="<portlet2:namespace />portlet_<%= portletId %>"> 
     <c:choose> 
      <c:when test="<%= Validator.isNull(portlet2.getIcon()) %>"> 
       1<liferay-ui:icon src='<%= themeDisplay.getPathContext() + "/html/icons/default.png" %>' /> 
      </c:when> 
      <c:otherwise> 
       <liferay-portlet:icon-portlet portlet="<%= portlet2 %>" /> 
      </c:otherwise> 
     </c:choose> 

     <%= PortalUtil.getPortletTitle(portlet2, application, locale) %> 
    </a> 
</li> 

<% 
    } 
} 
%> 

</ul> 

<% 
} 
%> 

어떤 도움을 주시겠습니까?

+0

오류의 스택 추적을 붙여 넣을 수 있습니까? –

+0

은 다음을 보여줍니다 : [ActionURL Tag : 71] 태그가 포틀릿의 컨텍스트 내에서 호출되지 않기 때문에 렌더 응답이 null입니다 – user3237100

답변

1

ActionURLTag.java (RenderURLTag.java로 확장)를 기반으로하면 <lifeary-portlet:renderURL>이 포틀릿 컨텍스트 내에서 사용되어야합니다. 현재 httpServletRequest의 javax.portlet.request 속성을 찾지 못하면 오류가 기록됩니다.

여기서 <lifeary-portlet:renderURL>html/portal/layout/view/control-panel.jsp에 있으며 이는 포틀릿의 일부가 아니므로이 오류가 발생합니다.

코드 ActionURLTag.java here.

+0

여러분의 반응이 많은 탱크 – user3237100