JSF访问支持映射对象

时间:2011-11-22 14:55:28

标签: jsf map param

我有一个jsp子视图页面,我已经传递了一个参数,然后我想将该参数传递给存储在会话bean中的map的get()方法。

例如:

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

在上面的示例中,MySessionBean实现了Map接口,我有自己的自定义get方法,如果密钥[params.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/22/11 11:23

我用静态字符串值替换了[param.id]。

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

一切顺利。它触发了我的map get方法并访问了会话bean和所有内容。因此,使用[params.id]传递给地图对象显然不喜欢整体。不知道该怎么做。

1 个答案:

答案 0 :(得分: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" %>

然后可以在页面上多次使用自定义标记,并且可以将右侧支持bean作为属性传递:

<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>