2011-11-22 2 views
1

매개 변수를 전달한 jsp 하위 뷰 페이지가 있고이 매개 변수를 세션 빈에 저장된 맵의 get() 메소드에 전달하려고합니다.JSF 백킹 맵 오브젝트 액세스

예 : 위의 예제 MySessionBean에서

<h:panelGrid id="panelGrid1" rendered="#{MySessionBean[param.id].showPanelGrid1}"> 
... 
</h:panelGrid> 

는 Map 인터페이스를 구현하고 나는 객체를 생성하고 아무도 키 [PARAMS 존재하지 않는 경우는 맵에 넣어 것입니다 내 자신의 사용자 정의 get 메소드를 가지고있다. 신분증]. 디버그 모드에서 코드를 실행하면 MySessionBean의 get 메소드가 호출되지 않고 내 패널이 항상 렌더링됩니다. 매개 변수를 올바르게 전달하지 않습니까? 또는 하위 뷰 correclty에 전달 된 매개 변수에 액세스합니까? 여기

내가이 서브 뷰에 매개 변수를 전달하는 방법입니다

<f:subview id="subview1"> 
    <jsp:include page="/MyTemplatePage.jsp"> 
    <jsp:param name="id" value="staticUniqueId1"/> 
    </jsp:include> 
</f:subview> 

나는 각 인스턴스 원 있도록이 내가 한 페이지에서이 템플릿 서브 뷰를 여러 번 포함 할 수 있도록이다 할 노력하고있어 이유 같은 backing bean 객체를 가지고 있지 않습니다. 따라서 세션에서 맵을 사용하고 ID를 전달하여 각 인스턴스의 백킹 빈에 액세스 할 수 있습니다.

또한 제한적인 JSF 1.2, JSTL 1.1, JBoss 4.0.4입니다. 그래서 RichFaces 나 JSF를 사용하여 답변을 사용할 수 없습니다 2.

편집 : 11시 23분

11/22/11 내가 정적 문자열 값으로 [param.id] 대체되었습니다.

<h:panelGrid id="panelGrid1" rendered="#{MySessionBean.MY_TEMP_VAL.showPanelGrid1}"> 
    ... 
</h:panelGrid> 

모든 것이 작동했습니다. 그것은 내 맵 get 메소드를 트리거하고 세션 빈과 모든 것을 액세스했습니다. 따라서 [params.id]를 사용하여 전체를 선호하지 않는 것은 분명합니다. 여기에서 무엇을해야할지 모르겠습니다.

답변

2

JSF2에서 적절하고 쉬운 해결책은 복합 구성 요소를 사용하는 것입니다. JSF 1.2와 jsp가 붙어 있기 때문에 대신 tag files을 사용할 수 있습니다. 이들은 정규 jsp와 같으나 확장자는 tag 또는 tagx이며 WEB-INF/tags입니다. 구문이 될 것 JSP, 당신은 다음 xmlns:myTags="urn:jsptagdir:/WEB-INF/tags/" 같은 네임 스페이스를 선언해야

<jsp:root version="2.1" 
      xmlns:jsp="http://java.sun.com/JSP/Page" 
      xmlns:h="http://java.sun.com/jsf/html"> 
    <jsp:directive.attribute name="myBean" 
          required="true" 
          rtexprvalue="false" 
          deferredValue="true" 
          deferredValueType="com.example.MyBean"/> 
    <h:panelGrid id="panelGrid1" rendered="#{myBean.showPanelGrid1}"> 
    ... 
    </h:panelGrid> 
</jsp:root> 

하여 jspx에서 : 나는 파일 이름 example.tagx에, 아래의 예에서 XML 구문을 사용하고

<%@taglib tagdir="/WEB-INF/tags" prefix="myTags" %> 

사용자 정의 태그는 다음 페이지에 여러 번 사용할 수 있습니다와 콩을 백업 권리는이 같은 속성으로 전달 될 수 있습니다 :

<myTags:example myBean="#{myBeanInstance1}" /> 

편집 : 당신은 또한 버전을 지정하는 파일 WEB-INF/tags/implicit.tld을해야 할 수도 있습니다 : "jsp.error.beans.property.conversion org.apache.jasper.JasperException"

<?xml version = '1.0' encoding = 'UTF-8'?> 
<taglib xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-jsptaglibrary_2_1.xsd" 
     version="2.1" xmlns="http://java.sun.com/xml/ns/javaee"> 
     <tlib-version>2.1</tlib-version> 
</taglib> 
+0

내가의 예외를 geeting있어합니다. 나는 그것이 태그 속성 myBean = "# {myBeanInstance1}"에서 EL을 좋아하지 않는다고 생각한다. 커스텀 JSF 태그에 대한 다른 예제를 찾으려고 노력했으며, 그것들은 tld 파일에 설명 할 때 태그에 backing 빈을 할당하려고합니다. 하지만 jspx 파일을 사용하여 내용을 설명하고자합니다. – Nikordaris