2

私のアプリケーションでは、JSF1.2を使用しています。ファセットtaglibを使用したくないので、jsp:include属性を使用してJSPをインクルードしました。スタイルクラスの値を決定する変数をサブページに渡したい。以下はparent.jspのコードです

<f:view>
...
    <f:subview id="navigation">
        <jsp:include page="/subpage/child.jsp">
            <jsp:param value="page9" name="pageName"/>
        </jsp:include>
    </f:subview> 
...
</f:view>

子jspは

            <f:subview id="navigation">
    ...
                <t:commandLink id="page9" value="mylink" action="#{manageBean.someAction}" 
                  styleClass="#{param.pageName == 'page9'?'stepLinkActive':'stepLink'}" />
    ...
            </f:subview>

上記のコードでは、stepActiveLinkクラスはmyLinkに適用されていません。実際、#{param.pageName}の値は空白です。

以下のようにコマンドリンクを囲んで使用すると機能するSOでこのリンクを見つけました

        <c:if test='${param.pagename eq "page9"}'>      
            <t:commandLink id="page9"
                value="#{msgs['DICT.ISSUE_CONTROL.SPECIAL_INFO']} "
                action="#{bondIssueBean.gotoModifyPage9}" styleClass="stepLinkActive" />
        </c:if>
        <c:if test='${param.pagename ne "page9"}'>      
            <t:commandLink id="page9"
                value="#{msgs['DICT.ISSUE_CONTROL.SPECIAL_INFO']} "
                action="#{bondIssueBean.gotoModifyPage9}" styleClass="stepLink" />
        </c:if>

スタイルクラスを変更するためだけにコマンドリンク定義を複製する必要があるコマンドリンクがたくさんあります。今後、他のパラメータが渡されると、重複するコードが増える可能性があるのではないかと思います。私の質問は

  1. JSFELがパラメータ値を識別できないのはなぜですか-${param.paramName}?また、#{param ['pageName']}を使用してparam変数にアクセスしようとしましたが、うまくいきませんでした。
  2. 上記のif..elseを置き換えて、単一のコマンドリンク定義を使用するにはどうすればよいですか?
4

2 に答える 2

1

「設計上」失敗します。技術的な背景については、JSF Issue 629も参照してください。これは、次のように要約されています。

この問題について話し合った後、次の理由から、この問題をWONTFIXとしてマークします。

  • 主に、古いバージョンのTomcatでRIを機能させるための修正の副作用がなければ、これは1.1では機能しませんでした。その修正が削除されるとすぐに、jsp:paramは機能しなくなります。
  • 1.2の修正は非常に危険であり、追加した結果として意図しない副作用が発生した可能性があります。

ただし、<c:set>JSF ELでも使用できるように、リクエストスコープにコピーすることで回避策が考え#{}られます。

<c:set var="param_pageName" value="${param.pageName}" scope="request" />
<t:commandLink id="page9" value="mylink" action="#{manageBean.someAction}" 
    styleClass="#{param_pageName == 'page9' ? 'stepLinkActive' : 'stepLink'}" />
于 2012-09-12T13:01:26.963 に答える
-1

渡されたパラメータには、 #{request.pageName} EL式を使用してアクセスできます。これは大文字と小文字が区別され、渡されたパラメータはリクエストオブジェクトに保存されます。

于 2012-09-12T06:14:52.097 に答える