JSR 286 포틀릿 (포틀릿 스펙 2.0)을 작성 중입니다.을 통해 Java 코드에서 설정하고있는 JSP에서 설정하려고하는 일부 값이 있습니다. 그러나 포틀릿 이름 공간 이름을 사용하지 않고 JSP의 PortletSession
에서 특성을 다시 가져올 수없는 것처럼 보입니다.JSR 286 포틀릿에서 portletSessionScope 특성 얻기
JSR 286 및 PortletSession
의 나의 이해는 이것이다 : 각 포틀릿은 웹 컨테이너에서의 HttpSession의 하위 섹션 그 자체 "포틀릿 세션"을 받게됩니다
- 속성 "포틀릿 세션"에 추가 된 것은 해당 포틀릿에서만 볼 수 있습니다.
- 분리는 "javax.portlet.p?"형식으로 특성에 네임 스페이스를 추가하여 수행됩니다. 포틀릿이며 속성의 이름입니다. 나는 JSP에서
portletSessionScope
객체를 사용하는 것은 나를 다시 밖으로 비슷한에 당신이 일반에 그것을 어떻게 값을 얻을 수 있도록 나에게 속성에 드 참조 액세스 권한을 부여 할 것이라는 인상이 글을 읽는에서
했다 -ol JSP 코드 및 HttpSession. 그러나, 그것은 사실이 아닌 것처럼 보입니다.
는 다음과 같은 자바 코드를 가지고 :
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<%@ taglib prefix="portlet" uri="http://java.sun.com/portlet_2_0" %>
<portlet:defineObjects/>
<html>
<body>
<div>
${portletSessionScope.MESSAGE}
</div>
</body>
</html>
그러나 나는 <div>
태그에 인쇄 아무것도 얻을 :
private static void processGetMessage(ActionRequest request, ActionResponse response) throws PortletException, IOException {
PortletSession session = request.getPortletSession();
session.setAttribute("MESSAGE", "This is a sample message", PortletSession.PORTLET_SCOPE);
}
나는는 JSP 코드에서 잘 작동하는 다음과 같은 기대. 나는 또한 시도 :
${portletSessionScope.sessionData.MESSAGE}
${portletSessionScope[MESSAGE]}
${portletSessionScope["MESSAGE"]}
<%=portletSession.getAttribute("MESSAGE", PortletSession.PORTLET_SCOPE)%>
뿐만 아니라 몇 가지 다른. 나는이 같은 pageSessionScope
에 모든 변수를 인쇄 할 경우, :
<table>
<c:forEach items="${portletSessionScope}" var="s">
<tr><td>${s.key}</td><td>${s.value}</td></tr>
</c:forEach>
</table>
를 나는 그냥이 같은 포털 ID와 사전 보류, 거기 참조 :
javax.portlet.p합니다. 9f4396132993df65a8017810d6c48a0c-a6f0dbfb9072591830fbfb10d6c48a0c-96d16bb01556c9c7725e4632d6c48a0c 메시지
나는 그것을 가지고가는 경우에 그것은 지난 다음에? <%=portletSession.getAttribute("javax.portlet.p.9f4396132993df65a8017810d6c48a0c-a6f0dbfb9072591830fbfb10d6c48a0c-96d16bb01556c9c7725e4632d6c48a0c?MESSAGE", PortletSession.PORTLET_SCOPE)%>
또는
${portletSessionScope["javax.portlet.p.9f4396132993df65a8017810d6c48a0c-a6f0dbfb9072591830fbfb10d6c48a0c-96d16bb01556c9c7725e4632d6c48a0c?MESSAGE"]}
도
그런 다음 그것을 잘 작동합니다.그래서, 질문 :
- 는 왜 단순한 형태는 JSTL을 사용하고 EL가 작동하지?
- JSTL/EL이 예상대로 작동하도록 할 수 있습니까?
- 그렇지 않은 경우 속성 이름 앞에 추가하는 데 사용되는 네임 스페이스의 값을 어떻게 얻을 수 있습니까? 단순히
<portal:namespace>
의 값이 아니라 특정 인스턴스 ID 정보도있는 것으로 보입니다.
문제를 확인하는 데 도움이되는 경우 WebLogic 9.2 및 비 네트 7.4에 있습니다.
PortletSession.APPLICATION_SCOPE 또는 $ { MESSAGE} 중 하나를 시도해보십시오. –
Gautam
따라갈 수 있을지 잘 모르겠습니까? 다음과 같이하면된다 :'<% = portletSession.getAttribute ("MESSAGE", PortletSession.APPLICATION_SCOPE) %>'? 별도의 포틀릿 세션을 갖는 목적을 상쇄하지 않습니까? ''를 사용할 때, 값은 속성 이름에 사용 된 것과 같지 않습니다. 그것의 일부로 포함되어 있지만 전체 문자열 접두사의 1/3 정도를 차지합니다. 가치가있는 부분에 대해서는 이러한 제안을 시도했지만 효과가 없었습니다. –
CodeChimp