JSF访问后台映射对象



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

,

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

在上面的例子中,MySessionBean实现了Map接口,我有自己的自定义get方法,如果键[params.id]不存在,它将创建一个对象并将其放入Map中。当我在调试模式下运行代码时,MySessionBean的get方法永远不会被调用,我的面板总是被呈现。我没有正确传递参数吗?或者正确访问传递给子视图的参数?

下面是我如何将参数传递给子视图的:
<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

I替换[参数。Id]使用静态字符串值。

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

一切都很顺利。它触发了我的map get方法并访问了会话bean和所有东西。所以它显然不喜欢整个使用[参数]。传递给map对象。我不知道该怎么办

在JSF2中,正确而简单的解决方案是使用组合组件。由于您只能使用JSF 1.2和jsp,因此可以使用标记文件代替。这些类似于常规jsp,但扩展名为tagtagx,并置于WEB-INF/tags之下。在下面的示例中,我在文件名example.tagx中使用xml语法:

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

最新更新