2010-02-28 2 views
3

Я пытаюсь включить страницы JSP с jsp:param в среду портлета (используя контейнер портлета Pluto).Использование jsp: param/c: param в среде портлета

, например,

<jsp:include page="test.jsp"> 
    <jsp:param name="foo" value="bar"/> 
</jsp:include> 

и test.jsp,

<c:out value="${foo}"/> or <%= request.getParameter("foo") %> 

Выход всегда утративший я также попытался использовать c тегов, но получил тот же результат.

<c:import url="test.jsp"> 
    <c:param name="foo" value="bar"/> 
</c:import> 

Я искал сеть, и многие люди столкнулись с одной и той же проблемой, за исключением того, что нет никакого решения.

Это ограничение или есть другой способ сделать это?

ответ

2

Это нормально работает в обычной среде сервлетов, но я вижу, что в среде портлетов, похоже, это сломается. Это позор, но свидетельствует о том, что спецификация портлета - это, грубо говоря, сломанная.

Если <jsp:param> не будет работать для вас, альтернативой является использование запроса атрибутов вместо:

<c:set var="foo" value="bar" scope="request"/> 
<jsp:include page="test.jsp"/> 

И в test.jsp:

<c:out value="${requestScope.foo}"/> 

или может быть просто:

<c:out value="${foo}"/> 

Это не так аккуратно и содержит как параметры, но это должно работать портлетов.

+1

Это правильно. Однако я бы добавил, что API-интерфейс портлета предлагает встроенные способы/taglibs, чтобы обойти это. Я никогда не делал портлетов, поэтому не привязывал меня к нему, но быстро просматривая документы, я узнал, что при каждом '<портлете: param>' будет способ. – BalusC

1

У меня была та же проблема. Мое решение состояло в том, чтобы работать с объектом renderRequest Portlet (который доступен из включенных jsp-файлов). В моем портлете я установил атрибут объекта RenderRequest, а затем в моем JSP (включенном через jsp:include). Я использую API портлета для доступа к неявному объекту renderRequest. Вот пример:

MyPortlet:

public void doView(RenderRequest request, RenderResponse response) { 
    request.setAttribute("myBean", new MyBean()); 
    getPortletContext().getRequestDispatcher("myMainJSP.jsp").include(request, response); 
} 

myMainJSP.jsp:

<jsp:include page="header.jsp"/> 

header.jsp:

<%@ taglib uri="http://java.sun.com/portlet" prefix="portlet" %> 
<% page import="sample.MyBean" %> 
<portlet:defineObjects/> 
<% 
    MyBean myBean = (MyBean)renderRequest.getAttribute("myBean"); 
%> 
... html code... 
Смежные вопросы