2011-11-22 67 views
1

我有一個jsp子視圖頁,我已經傳遞了一個參數,然後我想將該參數傳遞給存儲在會話bean中的地圖的get()方法。JSF訪問支持地圖對象

例:

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

在上面的例子MySessionBean實現Map接口,我有這將創建一個對象,並把它放在地圖上如果不存在該鍵[PARAMS我自己的自定義get方法。 ID]。當我在調試模式下運行代碼時,MySessionBean的get方法永遠不會被調用,並且我的面板總是呈現。我沒有正確傳遞參數?或者訪問傳遞給子視圖correclty的參數?

這裏是我傳遞的參數此子視圖:

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

我試圖做到這一點,所以我可以有這個模板子視圖多次在一個頁面,讓每個實例贏得的原因沒有相同的支持bean對象。因此,在會話中使用映射並向其傳遞一個id以訪問每個實例的支持bean。

此外,我限制JSF 1.2,JSTL 1.1,JBoss 4.0.4。所以我不能使用使用RichFaces或JSF答案2.

編輯:11年11月22日11:23

我用一個靜態的字符串值取代了[param.id。

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

而且一切正常。它觸發了我的map get方法並訪問了會話bean和所有內容。所以它顯然不喜歡整個使用[params.id]傳遞給地圖對象。不知道從這裏做什麼。

回答

2

在JSF2中,正確和簡單的解決方案是使用複合組件。既然你被JSF 1.2和jsp所困,你可以用tag files來代替。這些像普通的jsps,但擴展名爲tagtagx,並且放置在WEB-INF/tags之下。我使用的XML語法在下面的例子中,在文件名example.tagx

<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,那麼你必須聲明命名空間像xmlns:myTags="urn:jsptagdir:/WEB-INF/tags/",在JSP語法是:

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

定製標記然後可以在頁面上多次使用,並支持豆權可以作爲這樣一個屬性進行傳遞:

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

編輯:您可能還需要一個文件WEB-INF/tags/implicit.tld指定版本:

<?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的例外「org.apache.jasper.JasperException:jsp.error.beans.property.conversion」。我認爲它不喜歡標籤屬性myBean =「#{myBeanInstance1}」中的EL。我試圖在自定義JSF標籤上找到其他示例,並且當它們在tld文件中描述標籤時,它們都希望將標籤分配給標籤。但我只想使用jspx文件來描述內容。 – Nikordaris