0

Facelet に次のコードがあります。

<ui:composition template="/templates/mastertemplate.xhtml">
    <ui:define name="pageTitle">
        <h:outputFormat value="#{msgs.productPageTitle}">
            <f:param value="#{param.productName}"/>
        </h:outputFormat>
    </ui:define>
    <ui:param name="categoryName" value="#{param.categoryName}"/>

    <ui:define name="content">
        <p>#{param.productName}</p>
        <h:form>
            <h:commandLink action="#{cartBean.addItemToCart(param.productName)}">
                <f:ajax event="action" render=":cart :cartPrice" />
                <h:graphicImage value="resources/img/addToCart.gif"/>
            </h:commandLink>
        </h:form>
    </ui:define>
</ui:composition>

必要に応じて印刷し#{param.productName}ます。はそのメソッドのas 引数をcartBean期待します(これがひどいことはわかっていますが、私の選択ではありません)。にロガーを設定しましたが、パラメーターが通過していないことがわかり、空です。StringaddItemToCartcartBean

私が次のことをした場合:

<h:commandLink action="#{cartBean.addItemToCart('someProductName')}">
    <f:ajax event="action" render=":cart :cartPrice" />
    <h:graphicImage value="resources/img/addToCart.gif"/>
</h:commandLink>

#{param.productName}文字列リテラルの代わりにを使用すると、正常に動作します。param 値を引数として渡せないのはなぜですか? ロガーが空の文字列を表示する理由を説明するメッセージが表示されますが、EvaluationExceptionこれをどのように行うべきかわかりません。

4

1 に答える 1

0

その方法が可能かどうかはわかりませんが、少なくとも悪い習慣のようです。検証/変換オプションなしで、文字列をバッキングバックに挿入します。

ここで機能させるために何をすべきかを説明するチュートリアルを見つけました。

于 2012-12-28T19:45:23.717 に答える