1

パラメータを渡した jsp サブビュー ページがあり、そのパラメータをセッション Bean に格納されているマップの get() メソッドに渡したいと考えています。

元:

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

上記の例では、MySessionBean は Map インターフェイスを実装しています。キー [params.id] に対してオブジェクトが存在しない場合は、オブジェクトを作成してマップに配置する独自のカスタム get メソッドがあります。コードをデバッグ モードで実行すると、MySessionBean の get メソッドが呼び出されず、パネルが常にレンダリングされます。パラメータを正しく渡していませんか? または、サブビューに渡されたパラメーターにアクセスしますか?

このサブビューにパラメーターを渡す方法は次のとおりです。

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

これを実行しようとしている理由は、このテンプレート サブビューを 1 つのページに複数回含めて、各インスタンスが同じバッキング 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] を使用してマップ オブジェクトに渡す全体が明らかに気に入りません。ここから何をすべきかわからない。

4

1 に答える 1

2

JSF2 では、複合コンポーネントを使用するのが適切で簡単な解決策です。JSF 1.2 と jsp にこだわっているので、代わりにタグ ファイルを使用できます。これらは通常の jsp と似ていますが、拡張子がtagortagxで、下に置かれて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 では、名前空間を のように宣言する必要があります。jsp ではxmlns:myTags="urn:jsptagdir:/WEB-INF/tags/"、構文は次のようになります。

<%@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>
于 2011-11-23T10:12:25.247 に答える